将本地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。是什么给了什么?
答案 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_CODE
“rc
”变量设置的单独位置直接在服务器上添加您的挂钩(“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_DIR
和GIT_WORK_TREE
定义到目标回购,以便git pull
成功。
GIT_WORK_TREE=/Users/me/Sites GIT_DIR=/Users/me/Sites/.git git pull