14

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

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

$ git push origin master

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

$ cd /central/workfiles
$ git pull
$ exit

我听说过 post-receive 挂钩,但不知道如何设置。我怎样才能做到这一点。

4

3 回答 3

13

我更喜欢指定工作树和 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 checkoutgit pull

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

但这意味着/central/workfiles不是“裸”git repo。它只是一个文件夹,您可以在其中签出裸 repo 的内容/bare/repo.git。有关该方法的示例,
请参见Brian Thomas回答。

那不符合 OP 规范。

于 2013-01-22T07:39:30.427 回答
7

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

#.git/hooks/post-receive

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

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

于 2014-06-04T02:05:20.320 回答
3

我会选择类似的东西

#!/bin/sh

cd /central/workfiles
git pull
exit

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

底线不要忘记使其可执行

chmod +x post-receive
于 2013-01-22T07:28:41.250 回答