Про git

Nov. 10th, 2021 03:25 pm
vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Тут я обнаружил, что опция --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)
phd_ru: (Default)
From: [personal profile] phd_ru
https://stackoverflow.com/q/6245570/7976758 Найдено в [git] current branch

git rev-parse --abbrev-ref HEAD

git symbolic-ref --short HEAD

Отличия между ними в том, как они реагируют на detached HEAD (когда HEAD указывает на коммит, а не на имя ветки):

$ git rev-parse --abbrev-ref HEAD; echo $?
HEAD
0
$ git symbolic-ref --short -q HEAD; echo $?
1

В твоих вариантах это:
$ git branch | awk '$1=="*" {print $2};'; echo $?
(HEAD
0
$ git branch --show-current; echo $?
0
Edited (detached HEAD) Date: 2021-11-10 01:49 pm (UTC)

Date: 2021-11-10 02:11 pm (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
У меня самый младший git 1.8.3.1, в нём symbolic-ref уже работает.

Date: 2021-11-10 01:46 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Хм. Мне вместо git branch --show-current всегда хватало git status, но спасибо.

А что это за !" такой? Первый раз вижу.

Date: 2021-11-10 01:53 pm (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
git branch --show-current — это для скриптов. git status плохо скриптуется.

Date: 2021-11-10 02:19 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Да, действительно. Я вставлю этот алиас (только имечко подобрать покороче).

А что это за ! такой?

Date: 2021-11-10 02:19 pm (UTC)
phd_ru: (Default)
From: [personal profile] phd_ru
В варианте
[alias]
xxx = yyy

git xxx <аргументы> вызовет git yyy аргументы, при этом если xxx — имеющаяся в git субкомманда, будет вызвана команда, алиас проигнорируется.

! используется для вызова произвольных внешних команд. Например

[alias]
root = !pwd

git root перейдёт в корень дерева (потому что все алиасы выполняются в корне) и вызовет pwd.

PS. Разумеется, правильный способ написать git root:

[alias]
root = rev-parse --show-toplevel

но я решил, что это самый простой способ объяснить алиас с !
Edited (root = rev-parse --show-toplevel) Date: 2021-11-10 03:22 pm (UTC)

Date: 2021-11-12 08:46 pm (UTC)
netch: (Default)
From: [personal profile] netch
Посмотрел в свои алиасы...

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"

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

January 2026

S M T W T F S
     1 2 3
4 56789 10
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 11th, 2026 05:02 pm
Powered by Dreamwidth Studios