在我将本地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)
我没有看到后收到钩子.是什么赋予了?
使用最新的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_DIR并GIT_WORK_TREE明确指向目标仓库,以便您git pull获得成功.
GIT_WORK_TREE=/Users/me/Sites GIT_DIR=/Users/me/Sites/.git git pull
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6867 次 |
| 最近记录: |