如何将版本控制与仅合并到主Git工作流?

如何将版本控制与仅合并到主Git工作流?

问题描述:

在一个合理的“仅合并到master”git工作流程(例如gitflow)中 - 所有更改都发生在分支中,然后合并(可能作为Pull Request的一部分) - 如何处理版本控制?如何将版本控制与仅合并到主Git工作流?

对于标记,我很容易就可以git tag特定的合并提交,没什么大不了的。

但是,许多应用程序框架依赖版本文件(例如package.jsongemspec甚至自定义文件)。

我看到几个选项:

  1. 修改该文件作为分支的一部分。这并不是很好,因为你很少提前知道哪个版本会先合并,特别是有许多分支并行运行的大型团队。
  2. 提交后修改文件。这不是很好,因为我现在承诺掌握,并且b-自动化的CI/CD将抓住之前的提交并释放它,但它具有旧版本号和c-有2个提交以用于一个版本的提交,有可能检出错误的版本;容易出现人为错误
  3. 使版本文件成为模板并从git标签自动生成它。这也不是很好,因为本地工具会破坏它(尝试运行npm <anything>且无效的package.json),并且回购不再可以作为原子单位独立运行。

是否有一个合理的标准方式来做到这一点,当版本控制是在提交的一部分的文件?

您可能会采用一种策略,人类可能通过合并为主分支做出贡献,并且只有自动化的CI/CD(例如Jenkins)可以直接在主服务器中更改版本文件的内容。从CI/CD的角度来看,自动化发布过程可能是这样的:

  1. 拉主(主代码冻结开始)
  2. 运行预发布版本(老版)
  3. 增量内容的ver文件和提交
  4. 运行版本建立与新版本版本(不同于#2的内容的ver文件)
  5. 推动主*回购(可能与--force,如果索姆EONE违反主代码冻结

作为补充,你可以保护版本文件从合并到主的变化与.gitattributes在版本文件目录与内容verfile merge=ours(见here

+0

大部分我都有,谢谢@IrLED。您的建议的关键是仅通过CI/CD更改版本控制文件?对此的挑战是,在那里通常比只有版本更多。想想'package.json'或'Gemfile'。在正常的开发过程中,大部分需要改变;只有一个领域需要控制。 – deitch

+0

>您的建议的关键是仅通过CI/CD更改版本控制文件? 是的,就是这一点。要将受保护的部分与公共可用部分分开,可以运行'package.json'的预处理类型 - 从ver文件注入值。 – IrLED

+0

我需要通过一点思考。这需要一些非常脆弱的逻辑 - 每个文件类型 - 以使用户能够改变除了那一行之外的所有内容。 – deitch

这听起来像在存储库中需要什么样的模板版本文件,然后将其作为正常构建系统的一部分构建到实际版本文件中,并从存储库中提取信息。

我建议Autorevision从版本库中获取版本信息,以便于使用。

+0

与@ IrLED的方法类似,使用特定的工具,谢谢。我想我会尝试一下两者的结合。 – deitch