2009-06-17 7 views
92

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 le TAIL correspondant. Je ne trouve rien en git help rev-parse qui puisse m'aider.Comment référencer la validation initiale?

Voici ce que je voudrais faire:

git show TAIL 

est ici une option je:

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

C'est assez hacky et dépend de la sortie du journal git ne change pas.

En ce moment je marque juste le commit initial et l'utilise comme refspec. Cependant, j'aimerais sortir un outil général, ce n'est donc pas une bonne option.

Répondre

110

Ne pas utiliser git-log pour les scripts: utilisez l'une git-rev-list, ou git-log avec spécifié format personnalisé ("de --format = <STH>" en option).

Il y a un problème supplémentaire avec votre question: il peut exister plus d'un tel commit racine QUEUE (parentless commit) dans un dépôt (même si nous écartons les branches déconnectées, comme « html », « man » et ' todo 'dans le dépôt git.git). Ceci est généralement le résultat de la jonction de projets séparés en un ou de l'utilisation de la fusion de sous-arborescence d'un sous-projet développé séparément. Par exemple, le dépôt git a 6 validations racine: git-gui, gitk (sous-fusionné), gitweb (fusionné, ne sont plus développés séparément), outils de courrier git (fusionnés très tôt dans l'historique du projet), et p4- exportation rapide (peut-être accidentelle). Cela ne compte pas les racines des branches 'html et' man ', les branches' convenience 'qui contiennent la documentation pré-générée, et la branche' todo 'avec la liste TODO et les scripts.


Vous pouvez obtenir la liste de tous parentless (root) engage accessible à partir de la branche actuelle à l'aide:

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

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

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

Aucun canal, toutes les racines: 'git rev-list --max-parents = 0 HEAD' – wowest

+3

@wowest: Il n'y avait pas d'option' --max-parents' quand je écrivait cette réponse. Thansk pour la mise à jour! –

+0

Pour moi, la 'git rev-list HEAD | tail -n 1' et 'git rev-list --max-parents = 0 HEAD' ne me retourne pas la même valeur de hachage. Celui qui utilise '--max-parents = 0' est en train d'obtenir le commit initial. Je pensais juste que je ferais remarquer que ce dernier semble plus fiable. – jbranchaud

21

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

+8

Cela retournera * un * de la queue valide; –

Questions connexes