我不知道如何在非root安装的gitolite中为一个特定的仓库创建post-receive hook。
我的裸仓库包含一个网站,应该在更新时将工作目录复制到docRoot(GIT_WORK_TREE=/path/htdocs git checkout -f
)。
在使用gitolite之前,我只需更新特定仓库的钩子。
Gitolite文档提到所有钩子都应该在hooks/common
下,所以我不明白它是如何工作的。
钩子应该命名为什么,放在哪里,如果需要更改结构,应该如何更改?
2013年7月更新:以下内容适用于gitolite V2(或“g2”),这是当时OP使用的版本(2011年11月)。
2013年8月更新,使用最新的gitolite 3.x: 现在你有了官方特定存储库钩子:
基本上只是在
<repo.git>/hooks
中创建一个符号链接,指向$rc{LOCAL_CODE}/hooks/repo-specific
内部的某个文件(除了gitolite-admin
存储库)
gitolite/hooks/common
中的钩子都会在由Gitolite管理的所有存储库中进行复制,详见hook propagation documentation。$GL_REPO
变量(由gitolite设置并传递给其接收到的任何git命令的所有脚本)。post-receive.mirrorpush
hook。
OP Eyal R在评论中补充道:$GL_REPO
用于确定我要更新哪个repo,但我缺少实际部分)。我创建了一个名为post-receive.test
的文件,其中包含echo“test”
,将其放在$HOME/gitolite/hooks/common
中,运行了gl-setup
,从工作站运行push-没有任何反应(没有“test
”输出)hook
目录中,作为链接,链接回.gitolite/common/hook
。请注意,它应该在$HOME/.gitolite/common/hook
而不是/gitolite
中。/home/git/gitolite
),作为git用户(通常为git
)。$ ssh myusername@devserver.com
$ sudo su - git
$ pwd
/home/git
$ cd gitolite
然后我们需要升级gitolite。为此,首先我们需要更新gitolite存储库。
$ git pull
然后我们需要重复安装命令(确保使用与之前相同的参数)
$ ./install
最后再次运行设置。
$ gitolite setup
PATH
中设置gitolite可执行文件,所以你可以像这样做:$ src/gitolite setup
Gitolite设置(“RC”文件) 这是让我最困惑的部分之一,但最终它变得非常简单明了。/home/git/.gitolite.rc
。确保你有一个名为LOCAL_CODE
的变量,在该文件中应该看到类似以下内容,如果没有,请添加。LOCAL_CODE => "$ENV{HOME}/.gitolite/local"
repo-specific-hooks
可用,如果没有,请添加。ENABLE => [
# COMMANDS
# These are the commands enabled by default
'help',
'desc',
'info',
...,
...,
...,
'repo-specific-hooks'
...,
...,
...
]
编写特定于存储库的挂钩
最后,在您的 本地 gitolite-admin
存储库中创建以下目录 hooks/repo-specific
,放置在刚刚设置的 LOCAL_CODE
变量所在的目录下,例如:
gitolite_admin/local/hooks/repo-specific
之后,您可以将钩子脚本添加到该位置,并通过gitolite conf文件进行管理,如文档中所述。请确保这些脚本是可执行的。
repo foo
RW+ = @all
option hook.post-receive = deploy
希望这能对一些人有所帮助。
干杯!
deploy
是脚本名称。它应该放在gitolite_admin/local/hooks/repo-specific
目录中的哪里?如果有多个仓库想要使用相同名称的脚本(比如说deploy
),该如何区分它们?我需要更多的例子来理解你的解释。 - Nik O'Laigitolite_admin/local/hooks/repo-specific
下。如果您想要针对每个repo使用不同的“deploy”脚本,则需要为每个repo创建一个部署脚本,并在每个repo的基础上设置它。例如:repo foo
RW+ = @all
option hook.post-receive = deploy-foo
repo bar
RW+ = @all
option hook.post-receive = deploy-bar
- RickyCheersdeploy-foo
,deploy-bar
,必须位于目录gitolite_admin/local/hooks/repo-specific
中。 - RickyCheersLOCAL_CODE => "$rc{GL_ADMIN_BASE}/local"
,但除此之外,这对我来说完美无缺。 - lanoxx
gitolite-admin
存储库的hook/common
目录中即可。 - VonC