我有一些工作树有一些依赖。 AFAIK,git子模块将强制执行以下操作:
我不介意回购变大,但拥有副本对我来说是非常不可接受的。它会迫使我重新组织所有项目,以便将副本链接起来。此外,编辑错误的文件很容易发生,导致混淆。
我有另一个想法:
我能看到的唯一问题如下:
我在问是否有人已经实施了它(或者这是一个坏主意)。
答案 0 :(得分:11)
我认为这是一个坏主意,因为它很奇怪,它会让你离开许多方面的支持路径。
首先澄清一下:当使用子模块时,'master'(引用)repo不会明显变大。它仅存储存储库引用(可能是URL)和提交ID。但这似乎不是这里的关键点。
在处理这样的问题时,你可以选择三条基本的路径:
将所有内容放在一个存储库中。你有10次说服自己真的需要把事情分开吗?请记住,您可以从一个仓库开始,然后再拆分。还要记住,git merge实际上是有效的,因此开发人员争用并不是一个问题。
使用一些外部包管理系统。 Git不是,也不是假装是包经理。您正在使用的平台有一个包管理器支持更复杂的依赖情况。 Maven,rubygems,npm,nuget ......有很多。
在子目录中使用“已安装”的子模块。
基本上,在处理您自己的代码时,子模块应该是您的最后选择。它们非常适合处理第三方库,但最终会成为您自己代码的王室痛苦。除此之外,您还提出了一个复杂的解决方案,而且工作起来不会很有趣。
答案 1 :(得分:2)
我不确定我是否关注你,因为父回购(你的“主人”)只存储对子模块的紧密SHA1的引用(在父回购中检出的子回购)。
父回购的大小根本不受影响。
subtree merge strategy(better managed though git subtree)会增加父回购的大小,但是(子树合并)并不是你所说的。
子模块的另一种替代方法是git-slave (gits),这有点像你想要实现的。