0%

如何分离 Git 子目录

最近工作遇到了一个问题。对我们公司的开发小组来说,整个小组的人员都在一个 Repository 下面协作,这个 Repository 里面的文件夹非常多,而我只负责其中的一个功能的开发,我开发的功能所在的文件夹是可以独立维护的,它不依赖于 Repository 里面的其他的任何一个文件夹。

现在我新招到了一位实习生,会跟我一同做这个功能。但很尴尬的是,原则上来说实习生是不能有整个 Repository 的权限的,因为其他的文件夹下可能有包含一些关键信息,那我又怎么把我的这一部分的代码共享给他呢?

有的小伙伴可能说可以用软连接,但是用软连接的话实际上是不行的,因为 git 在 commit 软连接的时候会把它当成文件对待的。

比如说我有一个文件夹啊,我创建了一个软连接到这个文件夹,创建的链接文件实际上是不能以文件夹的形式提交到 Git 仓库的。

那么怎么办呢?硬链接就好了。

我使用的是 Mac OS 系统,可选的方案有 hln、bindfs,但前者是不能链接文件夹的。

一个比较可行的方案就是使用 bindfs,安装方法如下:

1
brew install bindfs

然后使用如下命令即可:

1
bindfs source target

这样的话,比如我大库里面有个文件夹,名字叫做 foo,我就可以在我其他的目录下创建一个对该目录的挂载点 bar。

1
bindfs /var/project1/foo /var/project2/bar

这样我在 project1 下修改 foo 文件夹下的内容,project2 下的 bar 文件夹下的内容也会跟着修改了,我只需要把想要链接的文件夹都放在 project2 下,project2 作为一个独立的 Git 仓库,实习生只能看到我分离出来的内容,看不到大库 project1 下的内容。

这样如果实习生更新了 project2 的 bar 文件夹,提交到了 project2 对应的 Git 仓库,我从上面 pull 下代码,这样 project1 里面的 foo 文件夹也会跟着更新了,这样我再把新的改动提交到 project1 即可。