gitolite post接收特定裸回购的钩子

时间:2012-08-30 22:10:44

标签: git gitolite

将本地git repo推送到服务器之后:

$ git push origin master

我希望服务器上的裸仓(在收到我的推送之后)到:

$ cd /Users/me/Sites
$ git pull
$ exit

我在这里看了一些问题,他们在$ HOME / gitolite / hooks中提到了钩子,

但这是我正在使用的内容:

git@mm:gitolite $ pwd
/Users/git/gitolite
git@mm:gitolite $ ls
.git/                 README.txt            install*
CHANGELOG             check-g2-compat*      src/
COPYING               convert-gitosis-conf* t/

如何为特定的裸仓库添加post-receive挂钩?

如果我进入我的裸仓库:

git@mm:bare-repo.git $ ls hooks
applypatch-msg.sample*     pre-rebase.sample*
commit-msg.sample*         prepare-commit-msg.sample*
post-update.sample*        update@
pre-applypatch.sample*     update.sample*
pre-commit.sample*

我没有看到post-receive hook。是什么给了什么?

1 个答案:

答案 0 :(得分:7)

2013年8月更新,使用最新的gitolite: 您现在有official specific repo hook

  

它基本上只是在<repo.git>/hooks中创建指向$rc{LOCAL_CODE}/hooks/repo-specific内的某个文件的符号链接(gitolite-admin repo除外)


原始答案(

首先,如果您使用的是gitolite V3,您可以定义任何钩子,包括post-receive钩子(update钩子除外,请参阅using hooks):之前,{{3保留了pre-receive个钩子。

现在你可以通过在gitolite-admin/common/hooks本地克隆目录中复制它来添加一个钩子,并将gitolite-admin推回到gitolite服务器:gitolite将确保为 all <声明钩子/ em>裸管理。它管理。

您还可以在$LOCAL_CODErc”变量设置的单独位置直接在服务器上添加您的挂钩(“rc”意味着在gitolite V2中定义):$LOCAL_CODE/hooks/common。请参阅“gitolite.rc config file” 我们的想法是确保gitolite升级不会删除任何自定义程序。

只需定义'post-receive'文件,可执行文件(chmod 755),然后将其复制到您选择的common/hooks目录中gitolite-admin本地回购加git push ,或服务器上的.gitolite或服务器上的$LOCAL_CODE 注意:您没有看到“post-receive.sample”文件的事实并不妨碍您定义该挂钩。
如果直接在服务器上完成,则需要运行gitolite setup --hooks-only,以便在所有裸存储库上设置自定义挂钩。

你永远不会做的是将它直接复制到你的bare-repo.git/hooks目录之一:这是gitolite的工作,可以为所有裸露的回购发布“常见”钩子。
这样,您可以通过gitolite-admin repo的任何克隆直接管理它们(推回该repo将更新您可能已更改的任何钩子)。

“所有裸回购”意味着您的post-receive钩子必须知道它操作的裸仓库:
您可以通过customizing gitolite(设置为运行此挂钩的裸存储库的根.git目录)来执行此操作。

最后,对于这种post-receive挂钩,请参阅“checking the value of $GIT_DIR”:
您需要明确地将GIT_DIRGIT_WORK_TREE定义到目标回购,以便git pull成功。

 GIT_WORK_TREE=/Users/me/Sites GIT_DIR=/Users/me/Sites/.git git pull