Git远程通信详解




说Git是一个分布式的系统,既然它是一个分布式的系统那就肯定会涉及到远程通信,那么Git是采用什么协议来进行远程通信呢?

Local(本地协议)

Local本地协议就是基于本地文件系统进行的共享。

比如说公司的一个服务器,在服务器上拿出一个文件夹进行共享,那我们就可以把源码存储在这个共享文件夹里面,那么开发人员就可以基于这个本地协议直接访问这个共享文件夹来实现这个文件的commit和checket。

如下图所示:

  • 优点:简单,直接并且使用了现有的文件权限和网络访问权限。如果是小团队或者小项目建立一个这样的版本管理系统就很轻松。
  • 缺点:这种协议本身受制于文件系统共享的局限性,只能在局域网访问并且速度比较慢。

ssh协议

git支持利用ssh协议进行通信,这是绝大部分的Linux系统和Unix系统都支持的,所以利用该协议搭建Git服务是非常方便的。

  • 优点: SSH架构相对于比较简单,通过ssh访问比较安全,在进行文件传输的时候会进行压缩,传输效率会高一些。
  • 缺点: 使用ssh必须将用户ip,服务器的用户名、密码、账号给开发人员,权限体系不灵活。

http

Git的http协议实现是依赖WEB容器(apache、nginx)及cgi组件进行通信交互,并且利用WEB容器本身的一个权限体系进行授权验证。http Dump协议,在Git1.6.6版本之前该协议是只能下载不能提交的,也就是说这种协议值提供只读账号。再Git1.6.6版本之后提供了git-http-backend的CGI用于实现接收远程推送功能。

  • 优点:解决了local和ssh权限验证单一的问题、可基于http url提供匿名服务,从而可以放到公网上去。而local与ssh是很难做到这一点的。
  • 缺点:架设复杂,需要部署一些WEB服务器,和https证书之类的配置。
  • 应用场景:大型团队,需要对权限进行精准控制,需要把服务部署到公网上去。

Git协议

  Git协议是包含在Git软件中的一种特殊的守护进程。它监听在一个特定的端口(9418),类似于SSH服务,但是访问不需要任何授权。

  • 优点:传输速度快,是这四个协议里面最快的。如果你的项目很大并且不需要为写进行用户授权,架设Git守护进程是一个很不错的选择。它还使用了SSH相同的数据传输机制,但是它省去了加密和授权的开销。
  • 缺点:Git协议缺乏授权机制并且9418端口不是一个标准端口,防火墙一般不会开放。