git 局域网 两个客户端之间同步?

看git和svn的最大优势是分布式,去服务器化,想请教下,在局域网搭建一个git服务器后,两个git客户端之间的版本同步可以不通过服务器吗。现实中的场…
关注者
14
被浏览
19,986

6 个回答

git是分布式的,那么每个仓库都可以充当“客户端”,也可以充当“服务器”。可以像svn那样定义一个中心服务器,用于整合各个“客户端”上传的提交。两台电脑上的两个仓库,互为服务器,互为客户端。

如果在局域网里,其中一个仓库可以用git daemon命令开启一个守护进程监听访问事件,将仓库暴露于局域网中。其它仓库可以通过git命令访问这个仓库,可以clone,push等等。

也可以通过一些间接的方法。譬如用git bundle现将A仓库(的分支)变成一个bundle文件,传输到B仓库中,B仓库读取bundle中的数据。更粗暴地,可以将A仓库的.git直接拷贝到B仓库所在机器,然后再访问。

假如要同步的只是patch,而不是history,那么利用git format-patch作出patch以后,传输到另一台机器上,再用git am,git apply等命令合并进去。

Git 本身是去中心化的,Github 、Gitlib 等中心化平台只是为了方便多人合作而存在的。主机 A 使用 git init 命令创建的仓库可以被其他可以连接到 A 机器的 B、C 机器 clone push 的,即 「 git 仓库可以随时共享」。

A 机器开启守护进程,使用 git 协议公开当前目录 . 下的仓库:

git daemon --verbose --export-all --base-path=.

B 机器克隆 A 机器的仓库:

git clone git://$hostip_a/respostory_name

其中 $hostip_a 为 A 机器的 IP, respostory_name 为 --base-path 指定目录下的仓库名称。

通过这样的方式,即使没有 gitlib 、github 等平台,一样可以在局域网内团队共同协作任务,只要知道对方的 IP、和仓库名称即可。

以上 Git 的这个功能,大部分人觉得应该存在,很少有人发现和使用,你想要的合理的功能git 都有,这就是完美的软件。

最后,Git 是个完美而伟大的系统。向林纳斯•托瓦兹(Linus Torvalds)大神致敬。他改变了世界,和乔布斯一样。