本地 git 仓库间的通信

同一台电脑的两个 git 仓库间如何通信呢?

首先要明确一点:git 是分布式版本管理工具。也就是说各个 git 仓库间是相互独立的。

现在,我们在admin家目录下新建两个 git 仓库,分别取名为t1t2

1
2
3
4
5
[admin@bravo ~]$ git init t1
Initialized empty Git repository in /home/admin/t1/.git/
[admin@bravo ~]$ git init t2
Initialized empty Git repository in /home/admin/t2/.git/
[admin@bravo t1]$

然后,进入 t1 目录,创建一个名为 t1 的文件,并加入 git 跟踪

1
2
3
4
5
6
7
[admin@bravo t1]$ touch t1
[admin@bravo t1]$ git add .
[admin@bravo t1]$ git commit -m 'create t1'
[master (root-commit) 701f8b8] create t1
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 t1
[admin@bravo t1]$

接下来,进入 t2 目录,并关联 t1 仓库

1
2
3
4
5
[admin@bravo t1]$ cd ../t2
[admin@bravo t2]$ git remote add t1 /home/admin/t1
[admin@bravo t2]$ git remote -vv
t1 /home/admin/t1 (fetch)
t1 /home/admin/t1 (push)

最后,拉取 t1 目录中的文件

1
2
3
4
5
6
7
8
9
10
[admin@bravo t2]$ git fetch t1
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/admin/t1
* [new branch] master -> t1/master
[admin@bravo t2]$ git merge t1/master
[admin@bravo t2]$ ls
t1
[admin@bravo t2]$

好了,现在你就可以在 t2 仓库中同步到 t1 仓库中的内容了,由于 git 能够精确到行,因此很方便文件冲突的解决。

说了这么多,这有什么用呢?
在我们开发时,经常是前后端分离的,而且大家的代码都在同一台测试服务器上,一个完整的功能需要前后端代码合并后才能测试,这种方式就能完美合并前后端代码了。

注意:首先要对被拉取代码的目录拥有读取权限,也就是 t1 目录要有 r 才能执行上述操作。