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

时间:2016-11-30 10:45:43

标签: git versioning git-flow

在一个合理的"合并 - 只有主人" git workflow(例如gitflow) - 所有更改都发生在分支中,而这些更改又会合并(可能作为Pull Request的一部分) - 如何处理版本控制?

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

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

我看到了几个选项:

  1. 将文件修改为分支的一部分。这并不是很好,因为您很少提前知道哪个版本将首先合并,特别是对于一个并行运行多个分支的大型团队。
  2. 在提交后修改文件。这不是很好,因为a-我现在承诺掌握,而b-自动化CI / CD将抓住先前的提交并释放它,但它具有旧的版本号和c-具有2个提交来掌握一个发布,可以查看错误的版本;简单的人为错误。
  3. 使版本文件成为模板并从git标记自动生成它。这也不是很好,因为本地工具会破坏它(尝试使用无效npm <anything>运行package.json),并且repo不再能够作为原子单元独立存在
  4. 当版本控制在作为提交一部分的文件中时,是否有合理的标准方法来执行此操作?

2 个答案:

答案 0 :(得分:1)

您可能会采用人类可能通过仅合并为主分支做出贡献的策略,并且只有自动CI / CD(例如Jenkins)可以直接在master中更改版本文件的内容。从CI / CD角度看,自动发布过程可能如下所示:

  1. 拉主人(主代码冻结启动)
  2. 运行预发布版本(使用旧版本)
  3. 增加ver文件的内容并提交
  4. 使用新版本运行发布版本(与版本2的内容不同)
  5. 将主人推送到中央仓库(可能使用--force,如果有人违反了主代码冻结
  6. 作为补充,您可以使用内容为.gitattributes的ver文件目录中的verfile merge=ours保护ver文件免受合并到主版本的更改(请参阅here

答案 1 :(得分:1)

听起来好像是存储库中的模板版本文件,然后作为正常构建系统的一部分构建到实际版本文件中,并从存储库中提取信息。

我建议Autorevision将存储库中的版本信息转换为易于使用的形式。