Git协议介绍

起因

同事在用go get拉取一个go项目依赖时,其中一个项目使用git submodule引用了另外一个项目的GitHub仓库,然后报了host key verification failed错误。

排查过程

平时工作用的代码管理是使用的SVN,对Git的相关配置还不是很熟悉,先查看了git config发现配置的用户名是一个内网邮箱,故先怀疑是不是配置的用户名不对,需要改成GitHub的帐号。但是测试git clone我的公开仓库,又可以顺利clone,经过简单的搜索,将问题定位到了Git协议上,host key verification failed是SSH协议报出的错误,去git-scm查看手册学习到git服务器支持的几种协议解决了问题。

Git协议介绍

Git可以用四种协议来传输资料

本地协议

最基本的就是 本地协议(Local protocol) ,其中的远程版本库就是硬盘内的另一个目录。这个确实没怎么用过,也没怎么见过,一般公共Git服务没有提供这种协议。使用版本库路径作为URL

$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git

HTTP协议

1.6.6版本之前叫 Dumb HTTP协议,基本类似于本地协议,之后引入了 Smart HTTP协议,也是我们现在最流行的使用Git的方式了。支持匿名服务,也支持传输时的授权和加密。而且只用一个URL就可以做到。

优点

只关注Smart HTTP的优点,可以使用用户名密码授权,不需要SSH相关知识的支持,简单明了。协议被广泛使用,一般不会被防火墙阻断。

缺点

架设稍微复杂点。

SSH协议

通过 SSH 协议克隆版本库,你可以指定一个 ssh:// 的 URL:

$ git clone ssh://user@server/project.git

或者使用一个简短的 scp 式的写法:

$ git clone user@server:project.git

你也可以不指定用户,Git 会使用当前登录的用户名。

优点

架设简单,访问是安全的,协议高效,在传输前也会尽量压缩数据。

缺点

不能实现匿名访问

Git协议

是Git里的一个特殊守护进程;监听9418端口,类似SSH服务,但是访问无需授权。

优点

Git协议是Git使用的网络传输协议里最快的。相比SSH省去了加密和授权的开销。

缺点

缺乏授权机制。

Git子模块 git submodule

看完上述描述,考虑到私有模块的问题,最开始认为子模块的配置只能支持SSH或者HTTPS带授权的协议方式,经过测试,也能支持使用Git协议配置子目录,没有协议的限制。

K8S外部流量引入集群的几种方式总结

SSH登陆主机不尝试密码