Как ссылаться на начальный коммит? - PullRequest
115 голосов
/ 17 июня 2009

У меня есть скрипт, который должен ссылаться на начальный коммит в репозитории. У git есть специальная ссылка HEAD, но нет соответствующей TAIL. Я не могу найти в git help rev-parse ничего, что могло бы мне помочь.

Вот что я хотел бы сделать:

git show TAIL

Вот один из вариантов, который у меня есть:

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

Это довольно странно и зависит от того, что вывод git log не меняется.

Прямо сейчас я просто помечаю начальный коммит и использую его в качестве своего refspec. Однако я хотел бы выпустить общий инструмент, так что это не лучший вариант.

Ответы [ 2 ]

131 голосов
/ 17 июня 2009

Не используйте git-log для сценариев: используйте либо git-rev-list, либо git-log с указанным пользовательским форматом (опция «--format = »).

Есть дополнительная проблема с вашим вопросом: может существовать более чем одна такая корневая фиксация TAIL (фиксация без родителей) в репозитории (даже если мы исключаем отключенные ветки, такие как 'html', 'man 'и' todo 'в репозитории git.git). Обычно это является результатом объединения отдельных проектов в один или использования объединения поддеревьев отдельно разработанного подпроекта.

Например, в git-репозитории есть 6 корневых коммитов: git-gui, gitk (объединение в поддерево), gitweb (объединены, больше не разрабатываются отдельно), инструменты git mail (объединены в самом начале истории проекта) и p4-fast -экспорт (возможно, случайный). Это не считая корней веток «html» и «man», «удобных» веток, которые содержат предварительно сгенерированную документацию, и ветки «todo» со списком TODO и скриптами.


Если у вас git 1.7.4.2 или новее, вы можете использовать опцию --max-parents:

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

В противном случае вы можете получить список всех бездетных (корневых) коммитов, доступных из текущей ветки, используя:

$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
28 голосов
/ 17 июня 2009

git rev-list HEAD | tail -n 1 - более стабильный вариант.

...