2016-03-21 2 views
1

Любопытно, если следующие два всегда выводят одно и то же (название ветки)? Я использую zsh., показывающий имя ветки git в командной строке

git rev-parse --abbrev-ref HEAD 2> /dev/null 

против

ref=$($git symbolic-ref HEAD 2> /dev/null) 
echo "${ref#refs/heads/}" 

Если нет, то один способ предпочтительнее другого для создания контекста GIT в командной строке?

ответ

3

Они ведут себя одинаково, когда на ветке, но не в режиме «отсоединенного HEAD» (например, попробуйте git checkout --detach master, а затем git checkout master, чтобы снова прикрепить голову).

Реальный вопрос, на который нужно ответить: что вы хотите отображать в режиме автономного режима HEAD? Если вы хотите сокращенный хеш, используйте формат rev-parse. Если вы хотите что-то еще, используйте формат symbolic-ref, возможно, с дополнительным предложением, чтобы показать «отсоединенные» или что-то еще, если ошибки symbolic-ref.

1

@torec опубликовано отличное объяснение различий между 2, я просто хочу немного поработать с ним и объяснить немного больше о синтаксисе каждой команды.


git rev-parse --abbrev-ref HEAD 2> /dev/null


rev-parse

--abbrev-ref[=(strict|loose)]
Не-ambigu ous короткое имя имени объекта.
Опция core.warnAmbiguousRefs используется для выбора режима строгой аббревиатуры.

HEAD

Read here all about HEAD (+detached HEAD) here

Так что эта команда делает это просто получить SHA-1 из HEAD (rev-parse), и их преобразует его тотализатор имя ветви (--abbrev-ref)


git symbolic-ref HEAD

symbolic-ref Учитывая один аргумент, читает какую ветвь голову данная символическая ссылка относится к и выводит его путь относительно директории .git/.

Обычно вы дали бы HEAD в качестве аргумента, чтобы увидеть какой ветви ваше рабочее дерево на

The (символьно-ссылка) обычно используется, если вы хотите сделать что-то пересортицы рефов (или refspec (

Смежные вопросы