Come fare riferimento al commit iniziale?
-
06-07-2019 - |
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.
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.