git可以使用四种不同的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议。 在此,我们将会讨论那些协议及哪些情形应该使用(或避免使用)他们。
本地协议
使用场景:
- 共享文件系统
- 同一主机(个人)
优点:
- 简单,并且直接使用了现有的文件权限和网络访问权限
- 如果你的团队已经有共享文件系统,建立版本库会十分容易。 只需要像设置其他共享目录一样,把一个裸版本库的副本放到大家都可以访问的路径,并设置好读/写的权限,就可以了
缺点:
- 共享文件系统比较难配置
- 如果你想从家里推送内容,必须先挂载一个远程磁盘,相比网络连接的访问方式,配置不方便,速度也慢。
- 每一个用户都有“远程”目录的完整 shell 权限,没有方法可以阻止他们修改或删除 Git 内部文件和损坏仓库。
- 在同一个服务器上,如果允许 Git 访问本地硬盘,一般的通过 NFS 访问版本库要比通过 SSH 访问慢。
HTTP 协议
Git 通过 HTTP 通信有两种模式。 在 Git 1.6.6 版本之前只有一个方式可用,十分简单并且通常是只读模式的。 Git 1.6.6 版本引入了一种新的、更智能的协议,让 Git 可以像通过 SSH 那样智能的协商和传输数据。 之后几年,这个新的 HTTP 协议因为其简单、智能变的十分流行。 新版本的 HTTP 协议一般被称为 智能 HTTP 协议,旧版本的一般被称为 哑 HTTP 协议
优点:
- 使用简单、快速、高效
- HTTPS 协议被广泛使用,一般的企业防火墙都会允许这些端口的数据通过
缺点:
- 在一些服务器上,架设 HTTPS 协议的服务端会比 SSH 协议的棘手一些。 除了这一点,用其他协议提供 Git 服务与智能 HTTP 协议相比就几乎没有优势了
SSH 协议
优点:
- SSH假设简单(SSH 守护进程很常见)
- 使用简单、快速、高效
缺点:
- 不支持匿名访问 Git 仓库
- 如果你使用 SSH,那么即便只是读取数据,使用者也 必须 通过 SSH 访问你的主机, 这使得 SSH 协议不利于开源的项目,毕竟人们可能只想把你的仓库克隆下来查看。
- 如果你只在公司网络使用,SSH 协议可能是你唯一要用到的协议。
- 如果你要同时提供匿名只读访问和 SSH 协议,那么你除了为自己推送架设 SSH 服务以外, 还得架设一个可以让其他人访问的服务
Git 协议
Git 协议是包含在 Git 里的一个特殊的守护进程;它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。
优点:
- Git 协议是 Git 使用的网络传输协议里最快的
缺点:
- 缺乏授权机制
- 把 Git 协议作为访问项目版本库的唯一手段是不可取的。
- 一般的做法里,会同时提供 SSH 或者 HTTPS 协议的访问服务,只让少数几个开发者有推送(写)权限,其他人通过
git://
访问只有读权限
- 最难架设
- 它要求有自己的守护进程,这就要配置
xinetd
、systemd
或者其他的程序,这些工作并不简单。 - 它还要求防火墙开放 9418 端口,但是企业防火墙一般不会开放这个非标准端口。 而大型的企业防火墙通常会封锁这个端口。