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

jes*_*ssh 7 git gitolite

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

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

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

$ cd /Users/me/Sites
$ git pull
$ exit
Run Code Online (Sandbox Code Playgroud)

我在这里看了一些问题,他们在$ 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/
Run Code Online (Sandbox Code Playgroud)

如何为特定的裸仓库添加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*
Run Code Online (Sandbox Code Playgroud)

我没有看到后收到钩子.是什么赋予了?

Von*_*onC 7

使用最新的gitolite更新2013年8月:您现在拥有官方特定的repo hook:

它基本上只是创建一个符号链接<repo.git>/hooks指向内部的一些文件$rc{LOCAL_CODE}/hooks/repo-specific(除了gitolite-adminrepo)


原始答案(

首先,如果你使用的是gitolite V3,你可以定义任何钩子,包括一个post-receive钩子(除了update钩子,看看使用钩子):之前,使用gitolite V2,pre-receive保留钩子.

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

您也可以直接在服务器上的一个单独的位置被设计添加钩$LOCAL_CODE" rc"变量(" rc"在你的定义方式gitolite.rc配置文件)$LOCAL_CODE/hooks/common.参见" 定制gitolite ".
我们的想法是确保gitolite升级不会删除任何自定义程序.

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

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

"所有裸仓"意味着你的post-receive钩子必须知道它操作的裸仓:
你可以通过检查$GIT_DIR(设置.git为运行此钩子的裸仓库的根目录)的值来实现.

最后,对于这种post-receive钩子,请参阅" Git checkout in post-receivehook:" Not a git repository '.'" ":
您需要定义GIT_DIRGIT_WORK_TREE明确指向目标仓库,以便您git pull获得成功.

 GIT_WORK_TREE=/Users/me/Sites GIT_DIR=/Users/me/Sites/.git git pull
Run Code Online (Sandbox Code Playgroud)