首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在主测试环境中有子模块的CI/CD和到生产环境的稳定分支的最佳GIT工作流是什么?

在主测试环境中有子模块的CI/CD和到生产环境的稳定分支的最佳GIT工作流是什么?
EN

Software Engineering用户
提问于 2020-01-10 20:07:32
回答 3查看 1.2K关注 0票数 -1

在Azure DevOps中,有几个GIT repos与.NET核心web应用程序相关,这些应用程序与子模块的使用相互关联(我们在私有NuGet存储中使用了自动创建NuGet包,但这很难调试和维护)。

我们也有一个主支路的CI/CD管道到一个测试环境和一个稳定的分支与CI/CD到一个生产环境。

没有子模块,工作流程对我来说是清楚的:

  1. 我们在主分支中开发一个特性,并将其提交到主分支,直到功能完成,并且主分支没有bug
  2. 我们完成了从Master到稳定的分支和CI/CD发行到生产的合并。

但是有了子模块,这就变得更加棘手了。

下面是我们设置的草图:

  • Web主分支
    • 带有自定义库的子模块1-主分支
      • 带有自定义库的子模块2-主分支

为了防止未完成的特性从其中一个子模块的主分支进入Web应用程序的稳定分支,我认为稳定分支的设置应该如下所示:

  • Web稳定的分支
    • 带有自定义库的子模块1-稳定分支
      • 带有自定义库的子模块2-稳定分支

但是,为了使这一工作,我们需要改变的子模块,每次我们合并母版稳定。

是否有更好的工作流来处理不同git分支中的子模块?或者有一种很好的方法来将子模块转换为这些存储库的稳定分支?

编辑:

如果你投反对票,请在评论中告诉我原因,这样我就可以纠正我的错误了。匿名投票在我看来是“没有完成”,我总是(在堆叠溢出)评论为什么我否决。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2020-01-16 13:26:55

最后,我们使用了子模块,我发现您可以选择通过.gitmodules文件通过这是如此的帖子添加分支名。

因此,我将这段代码的最后一行添加到我的所有主分支中。

代码语言:javascript
复制
[submodule "SubmoduleTestRepo"]
    path = SubmoduleTestRepo
    url = https://github.com/jzaccone/SubmoduleTestRepo.git
    branch = master

当将一个主服务器合并到稳定时,我只需将其更新为

代码语言:javascript
复制
[submodule "SubmoduleTestRepo"]
    path = SubmoduleTestRepo
    url = https://github.com/jzaccone/SubmoduleTestRepo.git
    branch = stable

当然,这确实意味着,如果对嵌套子模块所做的更改,我首先需要将主分支合并到great的稳定分支,但是尽管如此,我还是保留了我习惯的伟大的调试和编辑流程,并且我可以在多个其他项目中使用相同的基础项目。这两件事对我们的工作流程都是至关重要的。

谢谢你在正确的方向上帮助我。

票数 1
EN

Software Engineering用户

发布于 2020-01-10 22:23:50

老实说,在处理子模块时,我总是很难找到可以使用的好工作流,特别是因为您指出了以下原因:

但是,为了使这一工作,我们需要改变的子模块,每次我们合并母版稳定。

我不喜欢为了实现日常变化而在一堆回购中协调大量的合并。主回购模块和子模块是否经常串联变化?子模块是否也用于其他项目,还是仅由项目在主回购中使用?你愿意考虑摆脱子模块,只做一个回购吗?我认为,如果您放弃子模块,您的工作流程将像您所描述的那样清晰。

在某些情况下,子模块是必需的,但是如果您决定它们增加的工作量和复杂性要比价值多,那么就可以在保留历史的同时将子模块滚动到您的主回购中。在主回购中,完全删除子模块,并提交该子模块。然后,在子模块repos中,将repo的内容移动到一个名为子模块的文件夹中,并提交该文件夹。最后,返回主回购,将子模块repos添加为remotes,然后将任何您命名的远程/主程序合并到您的主回购分支中,并使用--allow-unrelated-histories选项。

票数 3
EN

Software Engineering用户

发布于 2020-01-10 22:48:51

我有两个共享代码的要求

  1. 我自己的构建是可重复的。
  2. 我并没有意识到新的bug或破坏的更改/我可以积极地选择何时升级到新版本的依赖项。

这些通常通过锁定依赖的版本和某种版本控制方案来实现。Nuget在这里很好,因为除非我启动一个更改,否则我总是会得到相同版本的二进制文件,并且它遵循语义版本化,所以我大致知道我得到了什么级别的更改。

仅仅在我的脑海中跟踪一个稳定的依赖分支是不够的。我认为稳定是被证明的,一点也不改变。

Git子模块显然可以跟踪除了主人以外的分支..。但不要提交散列,这将是防止意外变化的理想选择。

也许一个带有符号的nuget包会起作用(用于调试)?

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/403651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档