4种 git protocol
本地
file://本地路径/project.git
相当于本地读取,是本地资源访问,无加密无认证,数据在本地传输
http
现如今使用的基本上是智能的http协议,像 GitHub、Gitee、码云上的开源项目,都是此类。
优点是免设置 ssh 公钥,验证机制灵活,可通过 用户名+密码 形式授权
git clone https://github.com/schacon/simplegit.git
ssh
形如 ssh: //username@Host/project.git 或者 user@Host:project.git
后者的缩写形式,不带 ssh 前缀,值得注意
$ git clone ssh://[user@]server/project.git
或者
$ git clone [user@]server:project.git
优点是有 ssh 认证,传输会压缩对象
不支持匿名访问,不利于开源项目
git
形如 git://Host/projet.git
比较好辨认,以 git :// 开头
git push --mirror git://10.22.xx.xx/myproject.git
git 协议本身没有加密功能,但速度最快
监听 9418 端口
要求有自己的守护进程,这就是我们为什么需要 xinetd 的原因
xinetd
xinetd 中的配置在 /etc/xinetd.d/git-daemon
service git
{
disable = no
type = UNLISTED
port = 9418
socket_type = stream
wait = no
server = /usr/bin/git
server_args = daemon --inetd --syslog --export-all --enable=upload-pack --enable=receive-pack --base-path=/home/work/repositories/
}
其中,base-path 设置了仓库根目录,git://ip/project.git 实际上访问的是 ip 主机上 base-path/project.git
总结
协议类型 | 优点 | 缺点 | 举例 |
本地 | 简单方便 | 远程访问困难 | $ git clone file://srv/git/project.git |
HTTP | 验证灵活,不用配公钥 | 管理凭证麻烦 | $ git clone https://github.com/schacon/simplegit.git |
SSH | 安全、高效 | 不支持匿名访问、需要配置用户名密钥 | $ git clone ssh://[user@]server/project.git 或 [user@]server:project.git |
Git | 速度最快 | 服务搭建稍复杂、依赖守护进程如xinetd | $ git push --mirror git://ip/myproject.git |
Gerrit 中的协议
主从同步
通过 replication 插件来完成主机与从机之间的代码同步
插件配置路径为 WORK-DIR/gerrit-site/etc/replication.config
[remote "replica"]
url = git://10.xxx.xxx.xxx/miui/${name}.git
push = +refs/*:refs/*
threads = 1000
mirror = true
timeout = 50
replicationDelay = 0
方式一: git 协议,git://Host/project.git
方式二:ssh 协议,ssh ://username@Host:/miui/platform/base.git
或 username@Host:/home/work/miui/platform/base.git
手动push
也可以使用上述两者协议
git push --mirror git://ip/myproject.git 或者
git push --mirror git@ip:/home/work/myproject.git
gitolite
按上所述,因为 git 协议无加密,所以 gitolite 的作用就是在 git server 与用户之间建立了一层认证。
gitolite 安装后,ssh daemon 不再直接使用 git-upload-pack or git-receive-pack 来进行代码的推拉,而是用 gitolite-shell 来取代了。
Question
- git@10.xxx.xxx.xx:/miui/test.git 是什么协议?
- 如果没有 xinetd 或者 xinetd service 被关闭,git://ip 是否可以使用?
-- 不能, fatal: unable to connect to xxxxx: errno=Connection refused
- gitolite 问题。。。