2016-02-04 4 views
0

Я пытаюсь создать псевдоним для моего рабочего процесса «merge to staging».Git config alias issue

Предположим, что я закончил задачу в ветке «dev/layout_fix» и хочу развернуть ее до этапа после совершения.

Это мой путь:

  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)"

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

Возможно ли записать текущее название ветки в переменной до того, как будет проведена постановка?

ответ

1

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

Несомненно. Поскольку вы добавляете свои псевдонимы git с !, это всего лишь скрипты shells. Таким образом, вы можете придерживаться вывода команд 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 

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

+0

Да, вот оно! большое спасибо. – bambamboole

0

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

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

0

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

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

Благодаря @larsks для правильного подхода.

+1

Одна заметка: 'git rev-parse --abbrev-ref HEAD' будет печатать' HEAD', когда вы находитесь в режиме standached-HEAD. Это часто правильный ответ, но не полезный для вашей конечной цели (что связано с временным изменением «HEAD»).Вместо этого вы можете использовать 'git symbolic-ref -short HEAD', что приведет к сбою всей последовательности (возможно, что вы хотите), другой вариант - объединить по идентификатору commit, что является правильной вещью, но, возможно, что бы вы хотели). – torek