git rev-parse --short HEAD - PullRequest
       8

git rev-parse --short HEAD

0 голосов
/ 03 августа 2020

Что делает следующая команда?:

git rev-parse --short HEAD

Ответ должен включать:

  1. Краткий и точный ответ, объясняющий, что делает эта команда в целом
  2. Объяснение rev-parse
  3. Объяснение --short
  4. Объяснение HEAD

1 Ответ

1 голос
/ 03 августа 2020

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' без ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...