git rev-parse --short
- это оба способа:
Применяется к HEAD, он возвращает короткую версию SHA1 текущего извлеченный коммит (который не обязательно является ветвью, , когда HEAd отсоединен )
Вы можете увидеть, что он впервые используется в самой базе кода git / git в commit e3ae4a8613151c93ffce78c674ac91c1ee34eef6, август 2009 г., Git v1.6.5-rc0 .
Нотация расширения подстроки - это треп, который мы до сих пор не приняли. Вместо этого используйте 'git rev-parse --short', так как это также обрабатывает случай, когда уникальное сокращение длиннее 7 символов.
Так вместо:
${sub1sha1:0:7}
Используйте:
sub1sha1_short=$(cd clone3/sub1 && git rev-parse --short HEAD)
$sub1sha1_short
Вы обнаружите, что он использовался тогда в commit e8f21ca, июнь 2013, Git v1.8.4-rc0 , для подсказки bash:
bash подсказка: напечатать уникальное сокращенное имя отдельного объекта HEAD
При описании отсоединенного HEAD в соответствии с переменной среды $GIT_PS1_DESCRIBE
происходит сбой, запускается __git_ps1()
' cut -c1-7 .git/HEAD
', чтобы отобразить в приглашении сокращенное имя объекта фиксации из 7 шестнадцатеричных цифр. Очевидно, что при этом не учитывается core.abbrev
и не создается уникальное имя объекта.
Исправьте это, используя вместо этого 'git rev-parse --short HEAD
' и настройте соответствующий тест для использования нестандартного количества шестнадцатеричных цифр .
Поскольку --short
будет вычислять минимальную длину, чтобы SHA не был неоднозначным, это должен быть последний параметр, используемый git rev-parse.
См. commit e3e0b93, также июнь 2013 г., Git v1.8.4-rc0
bash подсказка: объедините 'git rev-parse' для отделенной головы
При описании отсоединенного HEAD в соответствии с переменной среды $GIT_PS1_DESCRIBE
происходит сбой, __git_ps1()
теперь выполняет подстановку команды '$(git rev-parse --short HEAD)
', чтобы получить сокращенное имя объекта фиксации отсоединенного HEAD. Это накладывает накладные расходы на fork () на подоболочку и fork () + exe c () на процесс git
.
Избегайте этих накладных расходов, комбинируя эту подстановку команды с "main" 'git rev-parse
'для получения пути к каталогу .git
& co. Это означает, что мы будем искать сокращенное имя объекта фиксации, даже если в этом нет необходимости, потому что мы находимся в ветке или можно описать отсоединенный HEAD. Однако это не имеет значения, потому что после того, как 'git rev-parse
' будет запущен и запущен для выполнения всех этих других запросов, дополнительные накладные расходы на поиск сокращенного имени объекта фиксации невозможно измерить, потому что он теряется в шуме.
Есть предостережение, когда мы находимся в нерожденной ветке, потому что в этом случае HEAD не указывает на действительную фиксацию, следовательно, запрос для сокращенного имени объекта фиксации не выполняется. Следовательно, «--short HEAD
» должен быть последним параметром «git rev-parse
», чтобы получить всю остальную необходимую информацию для приглашения даже в еще не родившейся ветке. Кроме того, в этом случае, и только в этом случае, 'git rev-parse
' не выводит последнюю строку, содержащую сокращенное имя объекта фиксации, очевидно, поэтому мы должны позаботиться о том, чтобы анализировать его только в случае выхода из 'git rev-parse
' без ошибок.