2009-06-17 17 views
92

Mam skrypt, który musi odwoływać się do początkowego zatwierdzenia w repozytorium. git ma specjalne odniesienie HEAD, ale nie ma odpowiedniego TAIL. Nie mogę znaleźć niczego w git help rev-parse, które mogłoby mi pomóc.Jak odwołać się do początkowego zatwierdzenia?

Oto, co chciałabym zrobić:

git show TAIL 

Oto jedna opcja mam:

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

To dość hacky i zależy wyjście dziennika git nie zmienia.

Właśnie oznaczam wstępne zatwierdzenie i używam go jako mojego refspec. Chciałbym jednak udostępnić ogólne narzędzie, więc nie jest to świetna opcja.

Odpowiedz

110

Nie używaj git-log skryptów: użyć git-REV-listy lub git-log z określonym formacie niestandardowym ("--format = <sth>" opcja).

Jest dodatkowy problem z pytaniem: może istnieć więcej niż jeden taki korzeń OGON commit (parentless commit) w repozytorium (nawet jeśli mamy dyskontować oddziały odłączony, takie jak: „html”, „człowiek” i " todo "w repozytorium git.git). Zwykle jest to wynikiem łączenia oddzielnych projektów w jednym lub korzystania z subtree scalonego oddzielnie opracowanego podprojektu.

Na przykład repozytorium git ma 6 uprawnień root: git-gui, gitk (poddane podtablicom), gitweb (połączone, nie rozwijane osobno), narzędzia git mail (połączone wcześnie w historii projektu) i p4- szybki eksport (być może przypadkowy). To nie liczy się z korzeniami gałęzi "html" i "man", gałęzi "convenience" zawierających wstępnie wygenerowaną dokumentację i gałęzi "todo" z listą i skryptami TODO.


Można uzyskać listę wszystkich parentless (root) popełnia dostępny od aktualnej gałęzi przy użyciu:

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

Jeśli git 1.7.4.2 lub nowszy, można użyć nowego --max-parents opcję:

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

Brak potoków, wszystkie pierwiastki: 'git rev-list --max-parents = 0 HEAD' – wowest

+3

@wowest: IIRC nie było opcji' --max-parents' kiedy pisałem tę odpowiedź. Thansk dla aktualizacji! –

+0

Dla mnie, 'git rev-list HEAD | tail -n 1' i 'git rev-list --max-parents = 0 HEAD' nie zwraca mi tej samej wartości skrótu. Ten używający '--max-parents = 0' w rzeczywistości pobiera początkowe zatwierdzenie. Pomyślałem tylko, że zwrócę uwagę, że ten drugi wydaje się bardziej niezawodny. – jbranchaud

21

git rev-list HEAD | tail -n 1 to bardziej stabilna opcja.

+8

To by zwróciło * jeden * ogona commits; może istnieć więcej niż jeden root (bez rodziców) commit –

Powiązane problemy