为裸仓库设置post-receive hook

时间:2013-01-22 07:17:20

标签: git github githooks

我在我的ubuntu服务器上设置了一个裸仓库。

将我的裸git repo推送到服务器之后:

$ git push origin master

我希望使用最新推送更新我的非裸仓库的内容,如图所示,非裸仓库是我的实际工作目录,名为workfiles。

$ cd /central/workfiles
$ git pull
$ exit

我听说过post-receive hook但是不知道如何设置它。 我怎样才能实现同样的目标。

3 个答案:

答案 0 :(得分:8)

我更喜欢指定工作树和git目录,而不是依赖于cd:

/bare/repo.git/hooks/post-receive

#!/bin/sh
GIT_WORK_TREE=/central/workfiles GIT_DIR=/central/workfiles/.git git pull origin master
exit

commented below作为ChrisV,您还可以依靠git checkout代替git pull

  

我认为git checkout -fgit pull更安全,因为如果需要手动修正,合并是拉动的一部分可能会使事情变得混乱。

但这意味着/central/workfiles 是一个“非裸”的git repo。它只是一个文件夹,您可以在其中查看裸仓库/bare/repo.git的内容 有关该方法的示例,请参见Brian Thomasanswer

这不符合OP规范。

答案 1 :(得分:4)

我使用像这样的帖子接收挂钩

#.git/hooks/post-receive

#!/bin/sh
GIT_WORK_TREE=/srv/http/sitedir/ git checkout -f

是的,请确保使其可执行。

答案 2 :(得分:2)

我会选择像

这样的东西
#!/bin/sh

cd /central/workfiles
git pull
exit

将上述脚本保存为post-receive,并将其放在裸仓库的hooks/目录中。

底线不要忘记让它可执行

chmod +x post-receive