git : Handle multiple variations of th same sofware in a single repo

标签 git workflow

我和我的团队同时处理多个项目,但他们都使用相同的代码库,并且需要针对每个项目进行调整。

例如,我们有包含组件AB 的基本代码。对于每个新项目,我们都必须修改 B,但 A 保持不变。

目前,我们每个项目都有一个 GIT 存储库,但有时我们会在 A 中发现一个问题,我们必须在所有项目中修复该问题。因此,我们正在考虑将所有项目保存在同一个 repo 中并使用分支来管理它们的可能性,以简化对公共(public)组件的更正。

我一直在寻找涵盖这种代码管理的工作流程(gitflow、github flow、gitlab flow...),但我没有找到符合我们需求的东西。

在同一个代码库中管理代码库的不同变体是个坏主意吗? 如果没有,是否有我可能没有发现适合这种应用程序的工作流程?还是我们只使用标准工作流并将所有项目分支视为单个存储库?

预先感谢您的帮助!

最佳答案

任务

管理同一个存储库的多个版本可能是个好主意,这取决于具体的代码库、目标和选择的方法。理想情况下,您希望封装核心功能,以便有一个始终相同的层,然后有不同的高层层访问核心层。

如何实现这一点有无数种选择,我想简单地提一下:

  • 使用 git:一个选项是在存储库 X 中拥有不变的核心功能,然后将此存储库动态导入到您其他项目的存储库中。这种功能的一个典型例子是 Git 子模块
  • 使用依赖注入(inject):根据您项目的语言,可以使用 DI 框架,例如 Dagger 2。您可以维护一个包含所有代码的单一存储库,然后使用 DI 框架动态加载具有所需更改的类
    • 一个示例可能会有所帮助:假设有一个 UI 类 A。此类取决于模型类 BC,具体取决于您要构建的应用程序的变体。 BC 都依赖于 D 类,这是您不变的核心功能。在这种情况下,可以让 Dagger 处理依赖项注入(inject)并提供 BC
    • https://dagger.dev/
  • 您可以使用专用的构建工具,例如 Gradle 或 Maven。可以定义整个构建管道,这样您就可以将所有代码库保存在一个存储库中,并根据您打算构建的版本执行特定的构建管道。
  • 另一种可能性是使用 Jenkins 之类的东西为每个相应的应用程序版本定义单独的构建管道。这本质上只是前面提到的方法的变体,但使用了更通用的工具

您可能需要重构您的代码库以干净地利用这两种方法中的任何一种,但是避免快速陷入技术债务是非常值得的。

不要做

您在任何情况下都不想做的是复制代码库,只需稍作改动,然后将其全部放入不同的存储库中。

我实际上已经亲眼目睹了这种方法的实际应用 - 它会在您的脸上爆炸。您最终会维护多个相似但在某种程度上不同的代码库。由于时间限制,A 的改进很可能并不总能在 B 中实现,反之亦然,您最终会多次执行相同的工作。也很难跟踪任一代码库的状态。

关于git : Handle multiple variations of th same sofware in a single repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68638538/

相关文章:

git - 从没有提交历史记录的另一个分支创建分支

git - 当我使用 "git log"命令时,它不再隐式通过 "less"进行管道传输

git - 重新父级 git commit 以拥有两个父级, merge 多个分支,并保留 future 的 merge 历史

Git 工作流程 - 在推送到公共(public) repo 之前或之后 merge master?

git - 文档翻译存储库的工作流程

java - 在 Spring web-flow 中存储流的状态

git - 我应该在项目源文件夹中还是在上层创建 Git 存储库

git - Phabricator:如何允许用户创建 repos?

php - WordPress Hooks 与 Includes?

Flutter - 设计人员/开发人员迭代流程的架构