Тут я обнаружил, что опция --show-current появилась в команде git branch как-то очень недавно. Почему-то в 2.20 ее еще нет. А поскольку у меня далеко не везде 2.27 и выше пришлось завести алиасы вида
[alias]
ls-subtrees = !"git log | awk '/git-subtree-dir:/ { print $2 }'|sort -u"
cur-branch = !"git branch|awk '$1==\"*\" {print $2};'"
в старом git и, соответвтено
[alias]
ls-subtrees = !"git log | awk '/git-subtree-dir:/ { print $2 }'|sort -u"
cur-branch = branch --show-current
в новом.
git branch|awk '$1==\"*\" {print $2};'
Date: 2021-11-10 01:38 pm (UTC)git rev-parse --abbrev-ref HEADgit symbolic-ref --short HEADОтличия между ними в том, как они реагируют на detached HEAD (когда HEAD указывает на коммит, а не на имя ветки):
В твоих вариантах это:
$ git branch | awk '$1=="*" {print $2};'; echo $? (HEAD 0 $ git branch --show-current; echo $? 0Re: git branch|awk '$1==\"*\" {print $2};'
Date: 2021-11-10 01:58 pm (UTC)Вариант с symbolic-ref не работает в git 1.7.1 (похоже, самый древний из имеющихся в поддерживаемых дистрибутивах). А вариат с abbrev-ref работает и там.
no subject
Date: 2021-11-10 02:11 pm (UTC)git1.8.3.1, в нёмsymbolic-refуже работает.no subject
Date: 2021-11-10 02:20 pm (UTC)Вот. А у меня еще есть МСВСфера 6.3.
no subject
Date: 2021-11-10 01:46 pm (UTC)Хм. Мне вместо
git branch --show-currentвсегда хваталоgit status, но спасибо.А что это за !" такой? Первый раз вижу.
no subject
Date: 2021-11-10 01:53 pm (UTC)git branch --show-current— это для скриптов.git statusплохо скриптуется.no subject
Date: 2021-11-10 02:01 pm (UTC)git status скриптуется хорошо, если ему опцию --porcelain добавить. Только при этом он показывать текущую ветку перестает, а показывает только статус разнообразных недозакоммиченных файлов.
no subject
Date: 2021-11-10 02:00 pm (UTC)git status крайне неудобен если у тебя в рабочей директории пара сотен файлов в каком-то незакоммиченном состоянии - например от незавершенного merge. Или от прогона тестов, результаты которых по каким-то причина (ещё) не прописаны в .gitignore
no subject
Date: 2021-11-10 02:19 pm (UTC)Да, действительно. Я вставлю этот алиас (только имечко подобрать покороче).
А что это за ! такой?
Date: 2021-11-10 02:19 pm (UTC)git xxx <аргументы>вызоветgit yyy аргументы, при этом еслиxxx— имеющаяся вgitсубкомманда, будет вызвана команда, алиас проигнорируется.!используется для вызова произвольных внешних команд. Напримерgit rootперейдёт в корень дерева (потому что все алиасы выполняются в корне) и вызоветpwd.PS. Разумеется, правильный способ написать
git root:но я решил, что это самый простой способ объяснить алиас с
!no subject
Date: 2021-11-12 08:46 pm (UTC)cbr = rev-parse --abbrev-ref HEAD
cbr2 = "!f(){ expr $( ( git symbolic-ref -q HEAD || cat $(git dir)/rebase-merge/head-name ) 2>/dev/null ) : 'refs/heads/\\(.*\\)'; }; f"