Gerrit 中使用的 git 协议

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

  1. git@10.xxx.xxx.xx:/miui/test.git 是什么协议?
  2. 如果没有 xinetd 或者 xinetd service 被关闭,git://ip 是否可以使用?

-- 不能, fatal: unable to connect to xxxxx: errno=Connection refused

  1. gitolite 问题。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值