Domanda

Ho uno script che deve fare riferimento al commit iniziale in un repository. git ha il riferimento speciale HEAD, ma non ha il TAIL corrispondente. Non riesco a trovare nulla in git help rev-parse che possa aiutarmi.

Ecco cosa mi piacerebbe fare:

git show TAIL

Ecco un'opzione che ho:

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

È piuttosto confuso e dipende dal fatto che l'output del log git non cambi.

Adesso taggo semplicemente il commit iniziale e lo uso come refspec. Tuttavia, vorrei rilasciare uno strumento generale, quindi non è un'ottima opzione.

È stato utile?

Soluzione

Non usare git-log per gli script: usa git-rev-list o git-log con il formato personalizzato specificato (" - format = < sth > " opzione).

C'è un ulteriore problema con la tua domanda: possono esistere più di uno tale commit radice TAIL (commit senza genitori) in un repository (anche se sconto rami disconnessi, come 'html', ' man 'e' todo 'nel repository git.git). Questo di solito è il risultato dell'unione di progetti separati in uno o usando l'unione di sottostrutture di sottoprogetti sviluppati separatamente.

Ad esempio il repository git ha 6 commit di root: git-gui, gitk (fusione di sottostrutture), gitweb (unito, non più sviluppato separatamente), strumenti di git mail (uniti molto presto nella storia del progetto) e p4-fast -export (forse accidentale). Questo non conta le radici dei rami 'html e' man ', & Quot; convenienza & Quot; rami che contengono documentazione pre-generata e ramo "todo" con elenco e script TODO.


Se hai git 1.7.4.2 o versioni successive, puoi usare l'opzione --max-parents:

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

Altrimenti, è possibile ottenere l'elenco di tutti i commit senza parent (root) accessibili dal ramo corrente usando:

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

Altri suggerimenti

git rev-list HEAD | tail -n 1 è un'opzione più stabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top