2011-05-11 48 views
9

Soy muy nuevo en git. Actualmente estoy tratando de familiarizarme con él al usarlo para rastrear los cambios en algunos archivos de Excel que estoy manteniendo para rastrear alguna actividad continua en la que estoy involucrado. Todos los archivos están en un único repositorio. Quiero etiquetar cada archivo por separado con sus versiones. es posible? Hasta ahora, lo que encontré fue la capacidad de etiquetar todo el repositorio. Si lo que intento hacer es incorrecto, sírvanse aconsejarme sobre las mejores prácticas.Cómo marcar un solo archivo en GIT

Gracias de antemano.

Editar

Cuando estaba haciendo esto elimina deliberadamente una etiqueta anterior para que se etiquetará todo el repositorio (como no he encontrado una manera de etiquetar archivos individuales) como v1.0. Como ahora quiero restablecer el nombre de la etiqueta con el nombre del archivo y bastante cómodo con la forma en que deberían suceder las cosas, ¿cómo puedo deshacer la eliminación y cambiar el nombre de la etiqueta anterior (la etiqueta eliminada)?

+3

'etiquetas git' compromete. No archivos ¿Puede decirnos qué quiere hacer con estas "etiquetas"? Creo que una respuesta más adecuada sería posible entonces. –

Respuesta

3

Las etiquetas se colocan en confirmaciones específicos en comparación con el repositorio en su conjunto como usted sugiere en su pregunta.

Una forma de hacer lo que está sugiriendo es asegurarse de que sólo se confirmó cambios en un único archivo con cada confirmación, entonces se puede etiquetar con esa confirmación por ejemplo. file1-v1.0 para representar v1.0 del archivo1.

¿Qué está tratando de representar mediante el etiquetado de estas confirmaciones sin embargo? Eso influirá en cualquier consejo sobre cómo mejorar su proceso.

+0

gracias. Como dije en mi pregunta, mi principal interés es conocer más sobre el entorno de Git. Pero en este caso particular, lo que intento hacer es rastrear un hito específico que quería lograr al mantener el documento. Por ejemplo: cuando termino de hacer el trabajo inicial, lo etiqueto como v1.0, cuando completo el documento con los demás y hago todos los cambios necesarios, quiero hacerlo v2.0, etc. En esencia, si hago uno commit como v1.0 y otro en otro archivo como v2.0, entonces no voy a lograr esto. De hecho, ambos deberían ser v1.0 –

1

No directamente, no.

Una etiqueta es un puntero a una revisión específica del repositorio. Los archivos individuales no tienen versiones separadas de la del repositorio. Si desea versiones separadas, sus opciones son tener un repositorio separado para cada archivo, tener una rama separada para cada archivo, o usar una herramienta diferente que esté orientada a archivos (como RCS, aunque carece de muchas de las características interesantes). git tiene).

Si los archivos están en absoluto relacionadas, por lo general, sí quieren etiquetar una versión específica del grupo de ellos. Si no lo son, puede etiquetar todo el grupo con la versión de cada archivo modificado en esa revisión. Restringir los cambios a un archivo por revisión puede hacer que este proceso sea más fácil de administrar.

+0

gracias, de hecho, lo que has sugerido finalmente es lo que pensé hacer. Además he estado realizando cambios solo sobre la base de un archivo a la vez. –

7

Solo puede etiquetar una confirmación, p. Ej. una cierta instantánea en la historia de su repositorio. Sin embargo, las tiendas de git los archivos como manchas y lo que puede hacer es utilizar notas git para agregar una nota a una mancha, como esto:

$ git ls-tree HEAD 
100644 blob 252f7c7df5bd181536a6c9d0f9c371ce1a5dd042 .gitignore 
100644 blob 8150ada74aba86c983ac3f8f63ab26aaa76fdcb7 README 
100644 blob c4b1ff6dcb2a8e50727df21ced8d2872cd91af79 TODO.txt 

$ git notes add -m "Adding a note to TODO" c4b1ff6dcb2a8e507 
$ git notes show c4b1ff6dcb2a8e507 
Adding a note to TODO 

Sin embargo, tenga en cuenta que esta nota (sin juego de palabras :)) solo se adjunta a este blob, por lo que siempre que el archivo cambie, se creará un blob nuevo (con otro valor hash sha1) y el nuevo blob no tendrá esta nota.

+0

gracias. Fue realmente algo en lo que pensar –

+0

Teniendo en cuenta su nota final (sobre el SHA cambiante después de un cambio de archivo): Esto me parece así * es * el comportamiento previsto. ¿No? – exhuma

2

Realmente debe explorar tener ramas separadas que rastrean los cambios a archivos específicos. Deberías poder trabajar con eso.

8

Técnicamente se puede etiquetar el contenido de un solo archivo sin su nombre de archivo. Pero tales etiquetas son de uso limitado. Se espera que las etiquetas apunten a confirmaciones, y las etiquetas especiales a las que no se comprometen tienen un comportamiento muy diferente (no se puede obtener una etiqueta tan especial). Por lo tanto, le sugiero que nunca use etiquetas que no sean de confirmación.

cuando se desea sólo algunos archivos a ser etiquetados, podría ser mejor usar un repo separada para ellos, o al menos diferentes ramas, ya que Git siempre se ve en el árbol por completo por sus operaciones.

Si usted insiste para crear una etiqueta tan especial que hace:

> git ls-tree HEAD 
040000 tree 2c186ad49fa24695512df5e41cb5e6f2d33c119b bar 
100644 blob 409940768f2a684935a7d15a29f96e82c487f439 foo.txt 

> git tag my-bar-tree 2c186ad49fa24695512df5e41cb5e6f2d33c119b 
> git tag my-foo-file 409940768f2a684935a7d15a29f96e82c487f439 
Cuestiones relacionadas