143 votes

Comment faire référence à la première engager?

J'ai un script qui doit faire référence à l'initiale de s'engager dans un référentiel. git a la spéciale de référence HEAD, mais qui n'ont pas de correspondant en TAIL. Je ne trouve rien en git help rev-parse qui semblent m'aider.

Voici ce que j'aimerais faire:

git show TAIL

Voici une option que j'ai:

git show `git log --reverse | if read a commit ; then echo $commit ; fi`

C'est assez hacky et dépend de la sortie de la commande git log de ne pas changer.

Droit maintenant, j'ai juste la balise initiale de commettre et de l'utiliser comme mon refspec. Cependant, j'aimerais sortir un outil général, ce n'est donc pas une bonne option.

Merci pour toute aide

168voto

Jakub Narębski Points 87537

Ne pas utiliser git log pour le script: utiliser git-rev-liste, ou git log avec spécifiée format personnalisé ("--format=<sth>" option).

Il y a un autre problème avec votre question: il peut exister plus d'une telle QUEUE racine commit (sans parents s'engager) dans un référentiel (même si l'on escompte déconnecté branches, comme 'html', 'homme' et 'faire' dans git.dépôt git). C'est généralement le fruit de l'adhésion de différents projets dans l'un ou à l'aide de la sous-arborescence de fusion de l'développée séparément sous-projet.

Par exemple le dépôt git a 6 racine s'engage à: git-gui, gitk (sous-arborescence-fusionné), gitweb (fusion, n'est plus développé séparément), git outils de messagerie (fusionné très tôt dans l'histoire du projet), et p4-fast-export (peut-être accidentelle). C'est sans compter les racines de html et de 'l'homme' branches, "commodité" les branches qui contient pré-documentation générée, et 'faire' de la direction, avec la liste des tâches et des scripts.


Vous pouvez obtenir la liste de tous les orphelins (racine) s'engage accessible à partir de l'actuel de la branche à l'aide de:

$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

Proposé par Robert Munteanu solution

$ git rev-list HEAD | tail -n 1

serait de retour l'un de ceux de la racine (la queue) s'engage.

Si vous avez git 1.7.4.2 ou plus récent, vous pouvez utiliser le nouveau --max-parents option:

$ git rev-list --max-parents=0 HEAD

39voto

Robert Munteanu Points 31558

git rev-list HEAD | tail -n 1 est plus stable option.

0voto

tomlogic Points 5044

Un autre hacky solution: il suffit de mettre un tag sur le commit que vous voulez utiliser comme la queue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X