【问题标题】:如何组织项目以共享代码?
【发布时间】:2022-01-17 02:17:47
【问题描述】:

我正在我构建的一个通用核心(一种我自己的框架)之上编写一些应用程序。

我想链接这个应用程序,所以如果我更新公共核心中的文件,每个应用程序也会更新。

所以我这样组织代码。我创建了一个 github 项目,在主分支中有公共核心文件,然后每个分支都是不同的应用程序。因此,如果我更新公共核心,我可以创建一个从主分支到应用程序分支的拉取请求,并且公共核心将被更新。

像这样一切正常,唯一的问题是当我遇到特殊情况时。

如果我必须在应用程序分支内编辑公共核心文件,例如我需要针对该应用程序的不同行为,我希望有机会将公共核心的单个文件隔离并在内部进行编辑应用程序分支,但其他文件应该像以前一样更新。

相反,显然在这种情况下我无法再合并拉取请求,因为应用程序分支中的文件与公共核心中的文件不同。

我的项目通常是这样组织的:

core/...
features/...
public/...
main.ts

corepublic 文件夹包含常见的核心文件,通常这些文件不会更改。所以我分支了公共核心存储库,我在文件夹中添加了功能模块,然后我从 main.ts(它是一个打字稿网络应用程序)加载了所有模块(核心和功能)。在公用文件夹中,我有不应该改变很多的支持文件。使用这种架构,一切正常,直到我只需要为一个应用程序更改公用文件夹中的文件。如果我更改它,我将无法再合并分支并接收来自公共核心文件的更新。

我之前尝试过使用子模块的方法,但我一点也不满意。

目标是能够从公共核心文件中获得持续更新,即使其中一些在本地进行了更改并且应该是“未跟踪的”或类似的东西。

您对如何解决此问题或以更好的方式组织代码有任何想法吗?

非常感谢

【问题讨论】:

  • 在同一个 repo 中为多个项目使用多个分支是充满危险的。我建议不要这样做。这听起来更像是子模块的情况,其中公共核心可以位于由不同项目共享的子模块中,或者完全独立的存储库中,其中公共核心位于其自己的存储库中,与每个项目存储库分开,并作为依赖项安装。但是,所有这些都取决于您的代码的结构,并且根据您的完整设置可能没有多大意义。告诉我们更多关于你的共同核心,以及它是如何集成到每个项目中的。
  • 感谢@joanis,我编辑了问题以包含更多详细信息
  • 查看submodulessubtree merging 并选择你的毒药。
  • #1 为什么子模块不能满足你? #2 您是否计划将来在 gihtub 中将自己的框架作为开源发布? #3 public 文件夹中有哪些文件? #4 你正在开发什么样的框架?列出我们最相似的

标签: typescript git module version-control


【解决方案1】:

我认为您的方案非常适合 monorepo。您可以使用工作区来执行此操作。我一直在使用纱线工作区(yarn1yarn2),最近npm also introduced workspaces,但我最近没有测试过它们。这也可以使用lerna

基本思想是你可以在同一个 repo 中有多个 npm 项目,你可以直接链接。它类似于安装依赖项,唯一的区别是这个依赖项是本地的。所以你可以有这样的结构:

  • 应用程序/app1
  • 应用程序/应用程序2
  • 库/核心
  • 库/功能

然后在应用程序的 package.json 文件中,您可以直接添加对您想要包含的核心/功能(或任何其他)库的引用。

【讨论】:

    【解决方案2】:

    最新版本的 git 具有 sparse-checkout 功能。

    您可以查看here了解更多详情。

    【讨论】:

      猜你喜欢
      • 2015-08-04
      • 2011-07-04
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 2018-05-18
      • 2014-08-09
      • 1970-01-01
      • 2019-04-11
      相关资源
      最近更新 更多