【问题标题】:Calling external commands when switching branches切换分支时调用外部命令
【发布时间】:2009-09-29 09:41:02
【问题描述】:

我想在切换分支后重新启动我的虚拟服务器,并尝试在我的.gitconfig 中添加一些别名,但没有让它工作。

co = checkout | !rap

只运行 rap,重启脚本。

co = checkout && !rap

我尝试过的其他一些事情(如checkout $1)给出了我的“git 用法:bla bla”。

【问题讨论】:

  • 我当然是要结账的。我会像其他人一样责怪缺乏咖啡。
  • 您可以编辑您的问题以更正它,顺便说一句。

标签: git bash


【解决方案1】:

请注意,您的问题的正确解决方案可能只是使用post-checkout hook,如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 &lt;somebranch&gt;”做“git checkout &lt;somebranch&gt;”,然后“rap”,试试

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

这里&amp;&amp; 的意思是:如果前一个命令成功,则执行下一个命令。无论先前命令的状态如何,您都可以使用; 来运行命令

顺便说一句,你不使用“git checkout &lt;branch&gt;切换分支吗? "git branch &lt;branchname&gt;" 创建 分支,而不检查它。

【讨论】:

  • 这并不是我的问题的真正解决方案,但非常通用。我尝试了co = "!sh -c 'git checkout \"$1\"' | rap -"co = !git checkout $1 | rap -,但它仍然只运行说唱。
  • Err... "|" 表示通过管道输出命令(将较早的标准输出与较晚命令的标准输入相结合)。您需要使用“&amp;&amp;”或“;”。另请参阅更新的答案。
  • +1 用于回答问题。 stackexchange 网站的主要失败在于,通常接受的答案与提出的问题无关,而是答案解决了问题背后的需求——对提问者有用,对后来搜索的人毫无价值。
【解决方案2】:

我想,你真正想要的是post-checkout 钩子(查看你的.git/hooks/ 目录和githooks manpage)。

【讨论】:

  • 谢谢,但是.. 我在 .git/hooks/post-checkout 和 chmod +x post-checkout 中尝试了 #!/bin/sh echo "foo",但 git-checkout 没有回显任何内容!跨度>
  • 我刚刚检查过,它确实有回声。如果你直接运行./.git/hooks/post-checkout 会发生什么?
  • 直接运行时效果很好。我什至试过git-init,但没关系。
  • 或者..你的git是什么版本?
  • 我检查了 git 存储库,看起来像第一个版本,包含 post-checkout 钩子是 1.5.4-rc0。你可以升级你的 git 还是不是一个选项?
猜你喜欢
  • 2012-02-24
  • 1970-01-01
  • 2023-03-03
  • 2015-08-29
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
相关资源
最近更新 更多