狠狠撸
Submit Search
Add mailinglist command to gitolite
?
0 likes
?
1,322 views
琛
琛琳 饶
Follow
How does gitolite works? How to add mailinglist command to gitolite?
Read less
Read more
1 of 13
Download now
Download to read offline
More Related Content
Add mailinglist command to gitolite
1.
Gitolite
2.
基础原理 ? ? ? ? gitolite的最基本原理(基于ssh的git命令): git clone git@host:repo.git 等价于 ssh
git@host 'git-upload-pack repo.git' ? git push ? 等价于 ? ssh git@host 'git-receive-pack repo.git'
3.
如何插入gitolite ? 如何“劫持”掉ssh上来的git-*命令? ? 秘密在~/.ssh/authorized_keys里:
4.
原理实现 ? ? ? ? gitolite实际效果: git clone git@host:repo.git 等价于 ssh
git@host '/home/git/bin/gitolite-shell chenlin.rao SSH_ORIGINAL_COMMAND="git-upload-pack repo.git"' ? git push ? 等价于 ? ssh git@host '/home/git/bin/gitolite-shell chenlin.rao SSH_ORIGINAL_COMMAND="git-receive-pack repo.git"'
5.
gitolite-shell实现 ? 设置GL_USER环境变量 ? 解析校验sshd设置的SSH_ORIGINAL_COMMAND环境变量 匹配git-upload-pack|git-receive-pack|git-upload-archive的就是git命令 匹配$rc{COMMANDS}的就是gitolite命令 ? ? ? ? ? 设置GL_REPO环境变量 检查是否存在,不存在且允许的话就创建新repo 检查GL_BYPASS_ACCESS_CHECKS环境变量是否可以跳过 调用Gitolite::Conf::Load::access()函数检查操作权限 调用常规git命令
/ 调用gitolite command脚本
6.
gitolite.rc ? 整个文件就存了一个%rc大哈希,各种配置。 ? ? ? ? ? ? ? ? ? ? ? ? ? GIT_CONFIG_KEYS ROLES =>
{ READERS => WRITERS => }, LOCAL_CODE => ENABLE => [ 'help', 'desc', 'info', 'perms', 'writable', ] => 'hooks.*', #允许git_config调用的key 1, 1, "$ENV{HOME}/.gitolite", #存放hooks、logs等的位置 # 默认可用的gitolite command列表
7.
gitolite command ? gitolite支持的command,脚本判断逻辑分成: – – – – – setup compile trigger list-phy-repos _which("commands/$command",
'x') ? 所以主要的特殊命令都是在~/bin/commands/下通过一个个同名脚 本实现的。一共有26个——但是注意之前gitolite.rc里有开关,默认 只开了5个。 ? 脚本不要求是Perl,实际上也有不少是Bash写的。
8.
gitolite hooks ? 在创建repo的时候,Gitolite::Conf::Store::new_repo里在git init
--bare之后还调用了一个hook_1()函数。这个函数干的事情: # propagate user-defined (custom) hooks to all repos ln_sf( "$rc{LOCAL_CODE}/hooks/common", "*", "$repo.git/hooks" ) if $rc{LOCAL_CODE}; # override/propagate gitolite defined hooks for all repos ln_sf( "$rc{GL_ADMIN_BASE}/hooks/common", "*", "$repo.git/hooks" ); # override/propagate gitolite defined hooks for the admin repo ln_sf( "$rc{GL_ADMIN_BASE}/hooks/gitolite-admin", "*", "$repo.git/hooks" ) if $repo eq 'gitolite-admin';
9.
repo specific hook ?
通过trigger触发 ? 必须通过gitolite-options.hooks.*设定 ? 同样需要在.gitolite.rc配置中开启才能使 用
10.
尘补颈濒颈苍驳濒颈蝉迟实现
11.
mailinglist解释 ? 整个%config模仿了Gitolite::Conf::Store和 Gitolite::Conf::Load ? 因为gitolite
git-config命令,采用的 Gitolite::Conf::Load::git_config()里会强制使用$repo.git/glconf文件里的%one_repo和%one_config。而最重要的access() 等函数都会用到这个git_config的返回值。
12.
总结 ? 实现mailinglist命令行操作需要: 1. 修改.gitolite.rc文件,添加ENABLE数组里的命令,编辑 允许的GIT_CONFIG_KEYS; 2.
在.gitolite/hooks/common/下创建post-receive文件 ,即git默认的post-receive-email 3. 在bin/commands/下创建mailinglist程序
Download