Проблема с псевдонимом Git config

Я пытаюсь создать псевдоним для своего рабочего процесса «слияние с промежуточным этапом».

Допустим, я закончил задачу в ветке "dev/layout_fix" и хочу развернуть ее в staging после коммита.

Это мой путь:

  1. git checkout staging
  2. git merge dev/layout_fix --no-ff
  3. git push
  4. git checkout dev/layout_fix

Теперь я попробовал этот подход:

[alias] branch-name = "!git rev-parse --abbrev-ref HEAD" stagify = "!git checkout staging && git merge $(git branch-name) --no-ff && git push && git checkout $(git branch-name)"

но псевдоним ветки-имя является «постановочным» из-за проверки.

Можно ли записать имя текущей ветки в переменную перед проверкой промежуточной стадии?


person bambamboole    schedule 04.02.2016    source источник


Ответы (3)


Есть ли возможность записать имя текущей ветки в переменную перед проверкой промежуточной стадии?

Конечно. Поскольку вы добавляете к псевдонимам git префикс !, это просто сценарии оболочки. Таким образом, вы можете вставлять выходные данные команд git в переменные так же, как и для любого сценария оболочки, например, что-то вроде этого:

[alias]
branch-name = "rev-parse --abbrev-ref HEAD"                             
mybranch = "!branch=$(git branch-name); echo my branch is: $branch"     

С этим определением я могу запустить это:

git mybranch

И получить:

my branch is: master

Этого должно быть достаточно, чтобы вы начали.

person larsks    schedule 04.02.2016

Полная команда псевдонима выглядит так:

stagify = "!branch=$(git rev-parse --abbrev-ref HEAD) && git checkout staging && git merge $branch --no-ff && git push && git checkout $branch"

Спасибо @larsks за правильный подход.

person bambamboole    schedule 04.02.2016
comment
Одно примечание: git rev-parse --abbrev-ref HEAD будет печатать HEAD, когда вы находитесь в режиме detached-HEAD. Часто это правильный ответ, но бесполезный для вашей конечной цели (которая включает временное изменение HEAD). Вместо этого вы можете использовать git symbolic-ref --short HEAD, что приведет к сбою всей последовательности (вероятно, то, что вы хотите — другой вариант — слияние по идентификатору фиксации, что допустимо, но, возможно, не то, что вам хотелось бы). - person torek; 04.02.2016

Вы можете получить текущее имя ветки, используя git describe --exact-match --all.

Вместо алиаса можно написать скрипт и развернуть его на /usr/libexec/git. Вам просто нужно поместить его туда и назвать git-stagify. Я пишу это по памяти, но я считаю, что это путь по умолчанию. Вы можете найти его, выполнив поиск, где находится git-pull (с тире), используя locate или что-то другое, доступное в вашем дистрибутиве. Это даст вам все преимущества среды сценариев bash, которые могут отсутствовать при простом использовании псевдонимов.

person coladict    schedule 04.02.2016