gpt4 book ai didi

git - merge 在 git 存储库中的子项目中增长的基础项目,除了 git 子模块或子树 merge 方法

转载 作者:太空狗 更新时间:2023-10-29 14:48:08 26 4
gpt4 key购买 nike

future 有一些子项目:“项目1”、“项目2”等。

此外,还有一个名为“Base Project”的项目,它是其他项目的基础。 “Base Project”是一个内容管理系统 (CMS)。

所有项目都有自己的 git 存储库。

“项目一”、“项目二”等使用“基地项目”发展壮大。

git 中有一些方法,如 submodule 或 subtreemerge。但似乎不适合这里。“基础项目”不应克隆到子目录中。它在根目录中。它在“项目 1”或“项目 2”中增长...

当我在子项目中工作时,我必须能够将“基础项目”更改单独推送到它自己的存储库以获取其他子项目。

我能做什么?

最佳答案

子树 merge 或子模块用于 component-based development :两个不同但连贯的文件组合在一起。
每组文件都在自己的目录中,因为它们可以独立分支或标记(子模块),也可以一起(子树 merge ,同时保留取回它们自己的历史记录的能力)。
不过,两者都需要一个单独的目录。

但是您所描述的(“Base Project”在根目录中,在“project 1”或“project 2”中增长) 是关于 system-based approach :所有组件 merge 为一个大组件:一大组文件,作为一个单元始终一起进化。
因此,每个项目可以有一个分支:branch1 用于 CMS-projet1branch2 用于 CMS-project2,以及等等。

但是,如果您需要将特定于 projectx 的修改或特定于 CMS 的修改报告回其原始(和单独的)存储库,则在专用分支中进行所述特定更改,然后 merge 这些变化:

  • branchp1 将用于影响 project1
  • 的更改
  • branchc1 将用于影响 CMS
  • 的更改
  • branch1 将是 branchp1branchc1
  • merge 的结果

(branch2 也是一样)

然后您可以将这些更改作为补丁导出:

  • branchp1project1 repo
  • branchc1CMS 仓库

不方便的是 Git 不会记住已经 merge 回原始存储库的内容,但这将允许您报告在 CMS-projectx 文件集中开发的共同历史到您的原始 CMSprojectx 存储库。


注意:如果您不想管理 2 个额外的分支,另一种解决方案是:

  • 确保每次提交仅包括 CMS 修改或项目修改
  • 留下有助于区分它们的提交消息(“[CMS] 我的 CMS 修改评论...”,或“[Project1] 我的项目 1 修改评论...
  • 使用script git-extract-patches仅将正确的提交导出为补丁。

关于git - merge 在 git 存储库中的子项目中增长的基础项目,除了 git 子模块或子树 merge 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13539636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com