2010-03-22 12 views
6

Digamos que tengo un archivo llamado: "todo"¿Un archivo en git asociado con el repositorio, bajo control de revisión, pero no asociado con ninguna rama en particular?

Es una lista de cosas que quiero hacer para este proyecto.

Quiero este archivo asociado con mi git repo.

Yo quiero que haya diferentes revisiones de este archivo,

sin embargo, yo no lo quiero que asocia a determinadas ramas. Por ejemplo:

  1. On branch master.
  2. crear algunos elementos básicos de tareas pendientes
  3. Rama "dev1"
  4. añadir más cosas a la lista de TODO
  5. Rama "dev2" de maestro.
  6. Agregar más cosas a la lista de todo
  7. Ahora, tengo diferentes revisiones del archivo todo por todas partes.

Solo quiero que haya un archivo "todo", ¿es posible? ¿Esto tiene sentido? ¿Estoy haciendo un uso indebido de todo de alguna manera?

Respuesta

10

Otro truco es utilizar una rama independiente, desprotegida en un subárbol de su proyecto, como lo hace Junio ​​Hamano (el actual mantenedor de Git) con el todo de Git.Libro de cocina:

$ cd project/ 
$ git branch 
* master 
$ git init META 

Ahora puede crear su “lista de tareas pendientes” y otros archivos en META/

$ cd META/ 
$ echo '* Item 1' > todo.org 
$ git add todo.org 
$ git commit -m 'Initial version of TODO file' 
[master (root-commit) 64748ba] Initial version of TODO file 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 todo.org 

vamos a cambiar el nombre de la sucursal a meta, también, y empujar de nuevo al repositorio principal:

$ git branch -m meta 
$ git push .. meta 

Usted tendrá que recordar para empujar la rama de nuevo después de cada confirmación; configurar un enganche post-commit puede estar en orden.

META/ ahora aparece como un archivo sin seguimiento en el repositorio principal; vamos a ignorar de forma local:

$ cd .. 
$ git status 
# (Shows META/ as untracked) 
$ echo META/ >> .git/info/exclude 

Ahora puede cambiar a voluntad las ramas, y META/ permanecerá intacta, siempre y cuando la rama que está cambiando no incluye trayectorias en conflicto, por supuesto.

El repositorio principal contiene ahora una rama adicional, totalmente independiente, que puede ser empujado y tirado como cualquier otra parte de su proyecto:

$ git branch 
* master 
    meta 
$ gitk --all 

Screenshot

+0

+1! Siempre pensé que esta era una configuración genial, y esta es una gran explicación de cómo implementarlo. – Cascabel

+0

+1, configuración muy interesante. – VonC

+0

¡También ha mostrado aquí la forma más simple de crear una rama desconectada! – tig

1

Utilice un repositorio diferente.

Guardo un directorio ~/org que emacs rastrea automáticamente en git y se sincroniza en mis máquinas. Todos mis todos y esos están ahí, pero no están asociados con ningún proyecto en particular. Si quisiera uno asociado con un proyecto específico, haría un ~/org/project.org.

1

Cada vez que desee actualizar su archivo de tareas, puede merge it first

git checkout previousBranch todo 

Nota: si no se fusionan, se puede ver el contenido de un TODO para cualquier rama con:

git show myBranch:todo 

Si su archivo todo está en el directorio raíz de su repositorio, funcionará desde cualquier ruta, ya que la ruta utilizada por es absoluta desde el directorio principal de dicho repositorio.

De esa manera usted puede:

  • ver las tareas que sólo tienen sentido en una rama
  • tener un guión concatenar el contenido de todas las versiones de tareas pendientes para toda la rama (git branch)
Cuestiones relacionadas