【发布时间】:2022-01-17 02:17:47
【问题描述】:
我正在我构建的一个通用核心(一种我自己的框架)之上编写一些应用程序。
我想链接这个应用程序,所以如果我更新公共核心中的文件,每个应用程序也会更新。
所以我这样组织代码。我创建了一个 github 项目,在主分支中有公共核心文件,然后每个分支都是不同的应用程序。因此,如果我更新公共核心,我可以创建一个从主分支到应用程序分支的拉取请求,并且公共核心将被更新。
像这样一切正常,唯一的问题是当我遇到特殊情况时。
如果我必须在应用程序分支内编辑公共核心文件,例如我需要针对该应用程序的不同行为,我希望有机会将公共核心的单个文件隔离并在内部进行编辑应用程序分支,但其他文件应该像以前一样更新。
相反,显然在这种情况下我无法再合并拉取请求,因为应用程序分支中的文件与公共核心中的文件不同。
我的项目通常是这样组织的:
core/...
features/...
public/...
main.ts
core 和 public 文件夹包含常见的核心文件,通常这些文件不会更改。所以我分支了公共核心存储库,我在文件夹中添加了功能模块,然后我从 main.ts(它是一个打字稿网络应用程序)加载了所有模块(核心和功能)。在公用文件夹中,我有不应该改变很多的支持文件。使用这种架构,一切正常,直到我只需要为一个应用程序更改公用文件夹中的文件。如果我更改它,我将无法再合并分支并接收来自公共核心文件的更新。
我之前尝试过使用子模块的方法,但我一点也不满意。
目标是能够从公共核心文件中获得持续更新,即使其中一些在本地进行了更改并且应该是“未跟踪的”或类似的东西。
您对如何解决此问题或以更好的方式组织代码有任何想法吗?
非常感谢
【问题讨论】:
-
在同一个 repo 中为多个项目使用多个分支是充满危险的。我建议不要这样做。这听起来更像是子模块的情况,其中公共核心可以位于由不同项目共享的子模块中,或者完全独立的存储库中,其中公共核心位于其自己的存储库中,与每个项目存储库分开,并作为依赖项安装。但是,所有这些都取决于您的代码的结构,并且根据您的完整设置可能没有多大意义。告诉我们更多关于你的共同核心,以及它是如何集成到每个项目中的。
-
感谢@joanis,我编辑了问题以包含更多详细信息
-
查看submodules 或subtree merging 并选择你的毒药。
-
#1 为什么子模块不能满足你? #2 您是否计划将来在 gihtub 中将自己的框架作为开源发布? #3 public 文件夹中有哪些文件? #4 你正在开发什么样的框架?列出我们最相似的
标签: typescript git module version-control