我在我的 ubuntu 服务器中设置了一个裸仓库。
在我将裸 git repo 推送到服务器后:
$ git push origin master
我希望使用最新推送来更新我的非裸 repo 的内容,如图所示,非裸 repo 是我名为 workfiles 的实际工作目录。
$ cd /central/workfiles
$ git pull
$ exit
我听说过 post-receive 挂钩,但不知道如何设置。我怎样才能做到这一点。
我更喜欢指定工作树和 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
正如ChrisV在下面评论的那样,您也可以依靠 a而不是 agit checkout
git pull
我相信
git checkout -f
比 更安全git pull
,因为如果需要手动修复,作为 pull 的一部分的合并有可能使事情变得混乱。
但这意味着/central/workfiles
不是“非裸”git repo。它只是一个文件夹,您可以在其中签出裸 repo 的内容/bare/repo.git
。有关该方法的示例,
请参见Brian Thomas的回答。
那不符合 OP 规范。
我像这样使用帖子接收钩子
#.git/hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/srv/http/sitedir/ git checkout -f
是的,请确保使其可执行。
我会选择类似的东西
#!/bin/sh
cd /central/workfiles
git pull
exit
将上面的脚本另存为post-receive
并将其放在hooks/
您的裸仓库目录中。
底线不要忘记使其可执行
chmod +x post-receive