我在我的网络主机上设置了一个裸仓库,并克隆了一个仓库,只要将更改推送到裸仓库就会更新。 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”。
有没有办法可以修改我的更新后脚本,只在主分支上进行更新时才能执行此操作?
答案 0 :(得分:6)
更新的引用作为参数传递给钩子。这意味着您可以使用case
检查主数据:
case " $* " in
*' refs/heads/master '*)
# Do stuff
;;
esac
顺便说一下,服务器上的git pull
只会获取其他分支,但如果master没有更新则不会修改你的工作目录,所以这不是必需的(除非你担心关于性能或许)。
另请参阅有关钩子的官方文档:http://schacon.github.com/git/githooks.html#post-update