Git 使⽤的协议
Git 可以使⽤四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP
协议。下⾯分别介绍⼀下哪些情形应该使⽤(或避免使⽤)这些协议。
值得注意的是,除了 HTTP 协议外,其他所有协议都要求在服务器端安装并运⾏
Git。
本地协议
最基本的就是本地协议(Local protocol),所谓的远程仓库在该协议中的表⽰,就是
硬盘上的另⼀个⽬录。这常见于团队每⼀个成员都对⼀个共享的⽂件系统(例如
NFS)拥有访问权,或者⽐较少见的多⼈共⽤同⼀台电脑的情况。后⾯⼀种情况并不
安全,因为所有代码仓库实例都储存在同⼀台电脑⾥,增加了灾难性数据损失的可能
性。
如果你使⽤⼀个共享的⽂件系统,就可以在⼀个本地⽂件系统中克隆仓库,推送和获
取。克隆的时候只需要将远程仓库的路径作为 URL 使⽤,⽐如下⾯这样:
$ git clone /opt/git/project.git
或者这样:
$ git clone file:///opt/git/project.git
如果在 URL 开头明确使⽤ file:// ,那么 Git 会以⼀种略微不同的⽅式运⾏。如果你只
给出路径,Git 会尝试使⽤硬链接或直接复制它所需要的⽂件。如果使⽤了 file:// ,
Git 会调⽤它平时通过⽹络来传输数据的⼯序,⽽这种⽅式的效率相对较低。使⽤
file:// 前缀的主要原因是当你需要⼀个不包含⽆关引⽤或对象的⼲净仓库副本的时候
— ⼀般指从其他版本控制系统导⼊的,或类似情形(参见第 9 章的维护任务)。我们
这⾥仅仅使⽤普通路径,这样更快。
要添加⼀个本地仓库作为现有 Git 项⽬的远程仓库,可以这样做:
$ git remote add local_proj /opt/git/project.git
然后就可以像在⽹络上⼀样向这个远程仓库推送和获取数据了。
优点
基于⽂件仓库的优点在于它的简单,同时保留了现存⽂件的权限和⽹络访问权限。如
果你的团队已经有⼀个全体共享的⽂件系统,建⽴仓库就⼗分容易了。你只需把⼀份
裸仓库的副本放在⼤家都能访问的地⽅,然后像对其他共享⽬录⼀样设置读写权限就
可以了。我们将在下⼀节“在服务器上部署 Git ”中讨论如何导出⼀个裸仓库的副本。
这也是从别⼈⼯作⽬录中获取⼯作成果的快捷⽅法。假如你和你的同事在⼀个项⽬中
合作,他们想让你检出⼀些东西的时候,运⾏类似 git pull /home/john/project 通常会⽐
他们推送到服务器,⽽你再从服务器获取简单得多。
缺点
这种⽅法的缺点是,与基本的⽹络连接访问相⽐,难以控制从不同位置来的访问权
限。如果你想从家⾥的笔记本电脑上推送,就要先挂载远程硬盘,这和基于⽹络连接
的访问相⽐更加困难和缓慢。