web-dev-qa-db-fra.com

Comment référencer le commit initial?

J'ai un script qui doit référencer la validation initiale dans un référentiel. git a la référence spéciale HEAD, mais n'a pas la TAIL correspondante. Je ne trouve rien dans git help rev-parse cela semble 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 du git log qui ne change pas.

En ce moment, je viens de marquer le commit initial et de l'utiliser comme référence. Cependant, je voudrais publier un outil général, ce n'est donc pas une excellente option.

118
Bryan Larsen

N'utilisez pas git-log pour les scripts: utilisez soit git-rev-list, soit git-log avec le format personnalisé spécifié ("--format = <sth> "option).

Il y a un problème supplémentaire avec votre question: il peut exister plus d'un un tel commit racine TAIL (commit sans parent) dans un référentiel (même si nous actualisons les branches déconnectées, telles que 'html', 'man' et 'todo' dans le référentiel git.git). Ceci est généralement le résultat de la jonction de projets séparés en un seul, ou de l'utilisation de la fusion de sous-arbres de sous-projets développés séparément.

Par exemple, le référentiel git a 6 validations racine: git-gui, gitk (fusionné sous-arborescence), gitweb (fusionné, n'est plus développé séparément), outils de messagerie git (fusionné très tôt dans l'historique du projet) et p4-fast-export ( peut-être accidentel). Cela ne compte pas les racines des branches 'html et' man ', les branches "commodité" qui contiennent de la documentation pré-générée, et la branche' todo 'avec la liste TODO et les scripts.


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

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

Sinon, vous pouvez obtenir la liste de toutes les validations sans parent (racine) accessibles à partir de la branche actuelle en utilisant:

$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
137
Jakub Narębski

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

30
Robert Munteanu