为裸仓库设置post-receive hook

dav*_*ais 9 git github githooks

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

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

$ git push origin master
Run Code Online (Sandbox Code Playgroud)

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

$ cd /central/workfiles
$ git pull
$ exit
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 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
Run Code Online (Sandbox Code Playgroud)

下面ChrisV 评论,你也可以依靠一个git checkout而不是一个git pull

我相信git checkout -f比安全更安全git pull,因为如果需要手动修复,合并是拉动的一部分有可能使事情变得混乱.

但是,这意味着/central/workfiles不是 "非裸"混帐回购协议.它只是一个文件夹,您可以在其中查看裸仓库的内容/bare/repo.git.
请参阅布莱恩托马斯答案,了解该方法的一个例子.

这不符合OP规范.


bla*_*amb 6

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

#.git/hooks/post-receive

#!/bin/sh
GIT_WORK_TREE=/srv/http/sitedir/ git checkout -f
Run Code Online (Sandbox Code Playgroud)

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


Gab*_*lla 4

我会选择类似的东西

#!/bin/sh

cd /central/workfiles
git pull
exit
Run Code Online (Sandbox Code Playgroud)

将上面的脚本保存为post-receive并将其放置在hooks/您的裸存储库的目录中。

最重要的是不要忘记使其可执行

chmod +x post-receive
Run Code Online (Sandbox Code Playgroud)