如何修改git post-update挂钩以仅在一个(主)分支上激活?

时间:2011-07-06 13:22:41

标签: git

我在我的网络主机上设置了一个裸仓库,并克隆了一个仓库,只要将更改推送到裸仓库就会更新。 Web主机上的克隆repo本质上是“production”,它位于public_html目录中。我非常仔细地按照本网站上的说明进行操作:

http://www.ibm.com/developerworks/web/library/wa-git/

它指示我在裸仓库中制作一个'更新后'钩子:

#!/bin/bash 
WEB_DIR="<web_dir>"
export GIT_DIR="$WEB_DIR/.git"
pushd $WEB_DIR > /dev/null
git pull
popd > /dev/null

如果我只在主分支上工作,这是一个很棒的VCS解决方案。

当我在位置A时,我想要克隆裸仓库,开始处理分支“newstuff”,提交更改,然后将其推送到裸仓库,这样如果我去位置B,我可以克隆裸仓库并可以访问“newstuff”。但我不希望通过更新后的脚本更新“production”

有没有办法可以修改我的更新后脚本,只在主分支上进行更新时才能执行此操作?

1 个答案:

答案 0 :(得分:6)

更新的引用作为参数传递给钩子。这意味着您可以使用case检查主数据:

case " $* " in
*' refs/heads/master '*)
        # Do stuff
        ;;
esac

顺便说一下,服务器上的git pull只会获取其他分支,但如果master没有更新则不会修改你的工作目录,所以这不是必需的(除非你担心关于性能或许)。

另请参阅有关钩子的官方文档:http://schacon.github.com/git/githooks.html#post-update