Как ссылаться на начальный коммит?
-
06-07-2019 - |
Вопрос
У меня есть скрипт, который должен ссылаться на начальный коммит в репозитории. У 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. Однако я хотел бы выпустить общий инструмент, так что это не лучший вариант.
Решение
Не используйте git-log для сценариев: используйте либо git-rev-list, либо git-log с указанным пользовательским форматом (" - format = < sth > " опция).
В вашем вопросе есть дополнительная проблема: в репозитории может быть более одного такого корневого коммита TAIL (коммит без родительского контроля) (даже если мы не учитываем отключенные ветки, такие как 'html', ' man 'и' todo 'в репозитории git.git). Обычно это является результатом объединения отдельных проектов в один или использования объединения поддеревьев отдельно разработанного подпроекта. Р>
Например, в git-репозитории имеется 6 корневых коммитов: git-gui, gitk (объединение в поддерево), gitweb (объединены, больше не разрабатываются отдельно), инструменты git mail (объединены в самом начале истории проекта) и p4-fast -экспорт (возможно, случайный). Это не считая корней веток 'html и' man ', & Quot; удобство & Quot; ветки, содержащие предварительно сгенерированную документацию, и ветку '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}$"
Другие советы
git rev-list HEAD | tail -n 1
- более стабильный вариант.