2011-05-11 4 views
9

Je suis très nouveau à git. J'essaie actuellement de me familiariser avec elle en l'utilisant pour suivre les changements dans certains fichiers Excel que je maintiens pour suivre une activité continue que je suis impliqué. Tous les fichiers sont dans un seul référentiel. Je veux marquer chaque fichier séparément avec leurs versions. Est-ce possible? Jusqu'à présent, j'ai trouvé la possibilité d'étiqueter tout le dépôt. Si ce que j'essaie de faire est faux, conseillez-moi sur les meilleures pratiques.Comment marquer un seul fichier dans GIT

Merci d'avance.

Modifier

Quand je faisais cela, je délibérément supprimé une balise précédente pour faire être étiqueté l'ensemble du référentiel (comme je ne l'ai pas trouvé un moyen de marquer des fichiers individuels) comme v1.0. Comme je veux maintenant réinitialiser le nom de la balise avec le nom du fichier et tout à fait à l'aise avec la façon dont les choses devraient se passer, comment puis-je annuler la suppression et renommer la balise précédente (la balise supprimée)?

+3

'balises git' Validations. Pas de fichiers. Pouvez-vous nous dire ce que vous voulez faire avec ces "tags"? Je pense qu'une réponse plus appropriée serait alors possible. –

Répondre

3

Les balises sont placées sur des validations spécifiques par opposition au référentiel dans son ensemble comme vous le suggérez dans votre question. Une façon de faire ce que vous suggérez est de s'assurer que vous ne validez que les modifications apportées à un seul fichier avec chaque commit, alors vous pouvez marquer ce commit avec par exemple. file1-v1.0 pour représenter v1.0 de fichier1. Qu'est-ce que vous essayez de représenter en marquant ces commits cependant? Cela influencera tout conseil sur la façon d'améliorer votre processus.

+0

merci. Comme je l'ai dit dans ma question, mon principal intérêt est d'en savoir plus sur l'environnement git. Mais dans ce cas précis, ce que j'essaie de faire est de suivre une étape spécifique que je voulais atteindre en maintenant le document. Par exemple: quand je finis de faire le travail initial, je l'étiquette comme v1.0, quand je termine de parcourir le document avec les autres et que je fais tous les changements nécessaires, je veux le faire v2.0, etc .. Essentiellement, si je fais un valider comme v1.0 et un autre sur un autre fichier comme v2.0 alors je ne vais pas y parvenir. En fait, les deux devraient être v1.0 –

1

Pas directement, non.

Une balise est un pointeur vers une révision spécifique du référentiel. Les fichiers individuels n'ont pas eux-mêmes de version distincte de celle du référentiel. Si vous voulez des versions séparées, vos options sont d'avoir un référentiel séparé pour chaque fichier, d'avoir une branche séparée pour chaque fichier, ou d'utiliser un outil différent orienté fichier (comme RCS - bien qu'il manque de nombreuses fonctionnalités intéressantes git a).

Si les fichiers sont liés, vous voulez généralement marquer une version spécifique du groupe. Si ce n'est pas le cas, vous pouvez toujours marquer le groupe entier avec la version de chaque fichier modifié dans cette révision. Restreindre les modifications apportées à un fichier par révision peut faciliter la gestion de ce processus.

+0

merci, en fait ce que vous avez suggéré est enfin ce que je pensais faire. En outre, je n'ai engagé des modifications que sur la base d'un seul fichier à la fois. –

7

Vous ne pouvez marquer qu'un commit, par ex. un certain instantané dans l'histoire de votre dépôt. Cependant, les magasins git les fichiers que blobs et ce que vous pouvez faire est d'utiliser notes git pour ajouter une note à un blob, comme ceci:

$ 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 

Toutefois, notez que cette note (sans jeu de mots :)) est seulement attaché à ce blob, donc chaque fois que le fichier change un nouveau blob sera créé (avec une autre valeur de hachage sha1) et le nouveau blob n'aura pas cette note.

+0

merci. C'était vraiment quelque chose à penser –

+0

Considérant votre note de fin (sur le SHA changeant après un changement de fichier): Cela me semble comme ceci * est * le comportement prévu. Non? – exhuma

2

Vous devriez vraiment explorer des branches séparées qui suivent les modifications apportées à des fichiers spécifiques. Vous devriez être capable de travailler avec ça.

8

Techniquement, vous pouvez marquer le contenu d'un seul fichier sans son nom de fichier. Mais ces étiquettes sont d'utilisation limitée. Les balises sont censées pointer vers des validations, et les balises spéciales vers des non-validations ont un comportement très différent (vous ne pouvez pas passer en revue une telle balise spéciale). Je suggère donc fortement de ne jamais utiliser de tags non-commit.Lorsque vous ne voulez que certains fichiers à étiqueter, il est préférable d'utiliser un repo séparé pour eux, ou au moins différentes branches, car git regarde toujours l'arbre complet pour ses opérations.

Si vous insistez pour créer une telle étiquette spéciale vous:

> 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 
Questions connexes