* 我也考虑过使用sub-trees 或submodules,但看起来还是很复杂。*
这正是您需要使用的。让我解释一下它是多么简单而不那么复杂
Submodules 始终允许将外部存储库嵌入到源代码树的专用子目录中指向一个特定的提交。
git submodule
像您目前所做的那样,将您的大项目分解为子项目。
现在将每个子项目添加到您的主项目中:
git submodule add <url>
将投影添加到您的存储库后,您必须初始化并更新它。
git submodule init
git submodule update
从 Git 1.8.2 开始,添加了新选项 --remote
git submodule update --remote --merge
将fetch从上游的每个子模块中的最新更改,merge them in,以及check out 子模块的最新版本。
正如the docs 描述的那样:
--remote
此选项仅对更新命令有效。不要使用超级项目记录的 SHA-1 来更新子模块,而是使用子模块的远程跟踪分支的状态。
这相当于在每个子模块中运行 git pull。
但是,在 C 中的 bug 修复会影响与父层共享的代码的情况下,我将如何推送提交?
再次重申:使用子模块会将您的代码作为其内容的一部分放在主项目中。将其本地放在文件夹中或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库。
这是子模块的图示 - 另一个项目中的项目,其中每个项目都是一个独立的项目。
git subtree
Git 子树允许您插入任何存储库作为另一个存储库的子目录
与submodule 非常相似,但主要区别在于代码的管理位置。在子模块中,内容被放置在一个单独的 repo 中并在那里进行管理,这允许您将其克隆到许多其他 repo。
subtree 将内容作为根项目的一部分进行管理,而不是在单独的项目中。
您无需写下如何设置它以及了解如何使用它,您只需阅读这篇将解释一切的优秀文章。
https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/