2009-09-29 3 views
2

Я хочу перезагрузить свой виртуальный сервер после переключения ветвей и попытался добавить некоторые псевдонимы в свой .gitconfig, но не получил его для работы.Вызов внешних команд при переключении ветвей

co = checkout | !rap 

только работает рэп, сценарий перезапуска.

co = checkout && !rap 

и некоторые другие вещи, которые я пытался (как checkout $1) дает мой "GIT использование: бла-бла".

+0

Конечно, я хотел сделать чек. Я буду обвинять в недостатке кофе, как и все остальные. –

+0

Вы можете отредактировать свой вопрос, чтобы исправить его, BTW. –

ответ

3

Я думаю, что вы действительно хотите, это post-checkout крючок (посмотрите в свой каталог .git/hooks/ и githooks manpage).

+0

Спасибо, но .. Я пробовал #!/Bin/sh echo "foo" в .git/hooks/post-checkout и 'chmod + x post-checkout', но git-checkout не отгоняет ничего! –

+0

Я только что проверил, и он делает эхо. Что произойдет, если вы запустите './. Git/hooks/post-checkout' напрямую? –

+0

Это хорошо работает при прямом запуске. Я даже попробовал «git-init», но это не имело значения. –

6

Примечание, что правильное решение вашей проблемы может быть просто с помощью post-checkouthook, как написано в hacker's answer.

Ниже Возможное решение для вопрос.

Вы либо используете одиночную команду git в псевдониме, например, например.

[alias] 
    alias = config --get-regexp ^alias\\. 

или вы используете любую команду с '!' префикс, возможно, используя «sh -c» трюк; то вы должны записать «git command», например.

[alias] 
    sed = !git ls-files --stage | grep ^100 | awk '{print $4}' | xargs sed 
    who = "!sh -c 'git log -1 --pretty=\"format:%an <%ae>\" --author=\"$1\"' -" 

(не то, что alias.sed - лучшее решение).


Если вы хотите для "git br <somebranch>" делать "git checkout <somebranch>", затем "rap", попробуйте

[alias] 
    br = !sh -c 'git checkout "$0" && rap' 

Здесь && означает: сделать следующую команду, если предыдущий будет успешным. Вы можете использовать ; вместо того, чтобы выполнить команду, независимо от статуса ранее команды

BTW вы не переключатель филиалов с помощью «git checkout <branch>»? «git branch <branchname>» создает ветку, не проверяя ее.

+0

Это не было решением моего вопроса, но очень общим. Я попробовал 'co ="! Sh -c 'git checkout \ "$ 1 \"' | rap - "' и 'co =! Git checkout $ 1 | рэп, и он все еще работает только рэп. –

+0

Errr ... "' | '" означает вывод команды команды (стандартный вывод со стандартным входом более поздней команды). Вам нужно использовать '' && ', или' ';'. См. Также обновленный ответ. –

+1

+1 для ответа * вопрос *. Основной сбой на сайтах stackexchange заключается в том, что довольно часто принятый ответ не имеет никакого отношения к заданному вопросу, но вместо этого ответ решает проблему, стоящую за вопросом, полезную для вопрошающего, бесполезную для людей, которые ищут позже. – chris

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