如何同步git仓库的子目录?

4
我想只从Git存储库的一个子目录中提取和推送。以下是我想实现的示例:
假设我有一个包含两个文件夹A和B的存储库(它们是顶级文件夹,如果有关系的话)。 我只想在B上工作和推送更改,而其他人正在处理A,甚至可能也在处理B。因为我想将我的更改提交回去,所以我不能将A放在.gitignore文件中,也不能使用git rm -rf --cached A,因为其他人需要A,但我知道我永远不会触及其中的任何文件,并且我只想存储它的不必要文件。我也不能使用子模块,因为我不想更改原始存储库,也不想维护第二个存储库。
那么我的问题是:这是否可行?如果可以,如何实现?

1
我的问题是:你为什么想要这样做?在我看来,子模块似乎对于你的使用情况并不是一个糟糕的解决方案。 - Tim Biegeleisen
@TimBiegeleisen,事实上我个人不想这样做,但我的同事想:P他唯一的观点是,他的SSD空间非常有限,而其他顶级文件夹包含大量其他资源(模型、纹理、渲染等),它们非常大,他知道自己将来不会使用它们。 - Peter Varo
1
老实说,如果你的同事购买一个更大的固态硬盘比通过这个复杂的过程来解决问题要便宜得多。 - Makoto
2
听起来你的同事想要使用稀疏检出。 - Raymond Chen
2个回答

3

您无法从存储库的特定文件夹中拉取或推送。您只能在分支上进行拉取或推送。

您是否考虑过创建一个分支并在处理 B 时切换到该分支?这样,您就不会破坏团队在 A 上完成的工作。

如果您想要检索团队在主分支上完成的工作到自己的分支中,您甚至可以将自己的分支变基。


2

可以将A添加到.git/info/exclude文件中。该文件与.gitignore文件相同,但不会离开本地计算机,因此不会影响您的同事。

另一种方法是拆分您的代码库,然后使用子树而不是子模块来跟踪子目录中的更改。子树可以减少一些由子模块引起的不便之处,但是保持同步仍需要一些额外的工作。


我接受了@topheman的答案,因为你们两个的答案同样有价值,但他回答得更快。但还是感谢你的努力,我也给你点了赞!无论如何,我已经在使用subtree,但在我们这种情况下,它不能完成任务=>我们不需要两个仓库,我们只需要一个。当我们使用subtree时,我们会使用两个仓库,实际上维护一组私有部分,这些部分可以是公共的(FOSS),作为一种反向镜像工具。但这有一个不同的提交方向 - Peter Varo
1
@PeterVaro 你做出了正确的选择 :) 我的回答更像是对上面回答的扩展,如果被选中会有些奇怪。那些真实的子树示例很有趣,谢谢! - tarleb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接