分类: Java
2011-02-21 17:20:42
:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://fallenlord.blogbus.com/logs/71173948.html
最近在玩Git,想为部门内部搭建一个Git的私服,于是开始研究。。。
首先,在开始选用协议之前,需要了解几个关键问题:
1. 因为git总是会将服务器端的所有历史版本同步到本地来,所以传输量相比SVN/CVS等要大上很多(而且Git存储的不是delta而是snapshot),因此传输效率对于Git来说至关重要
2. Git本身没有带权限控制,大多数是利用与协议相关的权限(如操作系统权限)。而在Git所支持的所有协议之中,并非所有协议都支持授权(如Git协议完全不能授权)
然后我们可以看看Git支持的几种传输协议了,他们是:本地、SSH、Git、HTTP/HTTPS
本地协议(Local Protocol)
这种协议实现最为简单:将库放在本地磁盘上,其他人通过磁盘共享来实现文件的提交和下载,权限由磁盘权限控制。用户使用的方式大概是:
$ git clone /opt/git/project.git 或 $ git clone file:///opt/git/project.git
两种写法工作方式略有不同,简单来说前者比后者效率更高,这里不进行讨论。这种方式的优点是简单,缺点是使用前必须先挂载磁盘,这显然不适合广域网或用户较多的情况。
SSH协议
通过SSH来实现文件的提交和下载,权限由账号控制。用户使用的方式大致是:
$ git clone ssh://user@server:project.git 或 $ git clone user@server:project.git
这种方式优点是高效,而且这几乎是官方推荐的唯一的向网络仓库上传代码方式。缺点是无法通过匿名方式访问网络仓库,即使只是读取。
Git协议
Git协议的实现方式是在服务器上启动一个Git的守护进程,用于监听9418端口。
这种方式优点是高效(最高效)。缺点是配置困难,无法授权!(要么所有人都可以读写,要么所有人都只读),而且默认端口9418很可能被墙!(企业里)
HTTP/HTTPS协议
一般与Apache等Web服务器组合使用。
优点是承压量大,只读的情况配置容易(甚至可以在服务器端不安装Git),但如果要求可写,就需要WebDAV支持。缺点是传输效率差。
总结
以上几种协议,可以根据实际情况进行选用,一般来说,可以同时支持多种来达到最佳效果。
例如:同时实现Git协议和SSH协议可以让匿名用户能够方便快速的获取代码,同时开发人员又可以提交代码(github.com就是使用的这种方式);而如果公司对于端口有限制,也可以考虑将Git协议改为HTTP协议;而如果悲剧得像我一样,公司即限制了9418端口又限制了用户机器到IDC服务器之间的SSH,就只能考虑本地协议和HTTP协议了