我在我的ubuntu服务器上设置了一个裸仓库。
将我的裸git repo推送到服务器之后:
$ git push origin master
我希望使用最新推送更新我的非裸仓库的内容,如图所示,非裸仓库是我的实际工作目录,名为workfiles。
$ cd /central/workfiles
$ git pull
$ exit
我听说过post-receive hook但是不知道如何设置它。 我怎样才能实现同样的目标。
答案 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 -f
比git pull
更安全,因为如果需要手动修正,合并是拉动的一部分可能会使事情变得混乱。
但这意味着/central/workfiles
不是一个“非裸”的git repo。它只是一个文件夹,您可以在其中查看裸仓库/bare/repo.git
的内容
有关该方法的示例,请参见Brian Thomas的answer。
这不符合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