如何将版本控制与“仅合并”结合起来以掌握git工作流?

如何将版本控制与“仅合并”结合起来以掌握git工作流?,git,versioning,git-flow,Git,Versioning,Git Flow,在一个合理的“只合并到主控”git工作流(例如gitflow)中——所有更改都发生在分支中,而分支又会被合并(可能是作为拉请求的一部分)——我如何处理版本控制 对于标记,我可以轻松地git标记特定的合并提交,没有什么大不了的 但许多应用程序框架依赖于版本文件(例如package.json或gempec甚至自定义文件) 我看到一些选择: 作为分支的一部分修改文件。这并不好,因为您很少提前知道哪个版本将首先合并,尤其是在一个拥有多个分支并行运行的大型团队中 提交后修改文件。这不是很好,因为a-I现在

在一个合理的“只合并到主控”git工作流(例如gitflow)中——所有更改都发生在分支中,而分支又会被合并(可能是作为拉请求的一部分)——我如何处理版本控制

对于标记,我可以轻松地
git标记
特定的合并提交,没有什么大不了的

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

我看到一些选择:

  • 作为分支的一部分修改文件。这并不好,因为您很少提前知道哪个版本将首先合并,尤其是在一个拥有多个分支并行运行的大型团队中
  • 提交后修改文件。这不是很好,因为a-I现在提交给master,b-automated CI/CD将获取以前的提交并发布它,但它有旧版本号,c-一个版本有2个提交给master,可能检查出错误的版本;容易的人为错误
  • 使版本文件成为模板,并从git标记自动生成它。这也不太好,因为本地工具会破坏它(尝试使用无效的
    包运行
    npm
    。json
    ),并且repo不再能够作为一个原子单元独立存在

  • 当版本控制在作为提交一部分的文件中时,是否有一种合理的标准方法来执行此操作

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

  • 拉主控(主控代码冻结启动)
  • 运行预发布版本(使用旧版本)
  • 增加版本文件的内容并提交
  • 使用新发布版本运行发布版本(与#2的版本文件内容不同)
  • 将主机推至中央回购(如果有人违反主机代码冻结,可能使用
    --force

  • 此外,您还可以使用ver file目录中的
    .gittributes
    和内容
    verfile merge=ours
    (请参阅)

    保护ver file,使其不受合并到主分支的影响。您可以采用一种策略,即人类可以仅通过合并和自动CI/CD(例如Jenkins)对主分支作出贡献可以直接在master中更改版本文件的内容。从CI/CD的角度来看,自动发布过程可能如下所示:

  • 拉主控(主控代码冻结启动)
  • 运行预发布版本(使用旧版本)
  • 增加版本文件的内容并提交
  • 使用新发布版本运行发布版本(与#2的版本文件内容不同)
  • 将主机推至中央回购(如果有人违反主机代码冻结,可能使用
    --force

  • 此外,您还可以使用ver file目录中的
    .gittributes
    和内容
    verfile merge=ours
    (请参阅)来保护ver文件不被合并到主控更改

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


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

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


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

    我已经拥有了大部分信息,谢谢@IrLED。您建议的关键是仅通过CI/CD更改版本控制文件?这方面的挑战在于,其中往往有很多内容,而不仅仅是版本。想想
    package.json
    Gemfile
    。在正常的开发过程中,大部分内容都需要合理地更改;只有一个字段需要控制。>您建议的关键是仅通过CI/CD更改版本控制文件?是的,这就是重点。要将受保护的部分与公共可用部分分开,您可以运行
    package.json
    -从ver文件中插入一个值的某种预处理。我需要仔细考虑一下。它需要一些相当脆弱的逻辑——每种文件类型也需要一些逻辑——以允许用户更改除这一行之外的所有内容。对于JSON,在预处理过程中,您可以反序列化ruby中的
    包。JSON
    (我假设您使用它,通过提及
    Gemfile
    ),无条件覆盖/添加
    “版本”:“1.0.0”
    在该结构中并将其序列化=>用户可以自由更改
    package.json
    他们想要的方式,但在发布过程中,“version”字段将具有protected ver.file的值这是一种有趣的方法。我很惊讶我没有看到这种大规模的解决方案,因为只有主合并的git流很受欢迎。您建议的关键是仅通过CI/CD更改版本控制文件?这方面的挑战在于,其中往往有很多内容,而不仅仅是版本。想想
    package.json
    Gemfile
    。在正常的开发过程中,大部分内容都需要合理地更改;只有一个字段需要控制。>您建议的关键是仅通过CI/CD更改版本控制文件?是的,这就是重点。要将受保护的部分与公共可用部分分开,您可以运行
    package.json
    -从ver文件中插入一个值的某种预处理。我需要仔细考虑一下。它需要一些相当脆弱的逻辑——每种文件类型也需要一些逻辑——以允许用户更改除这一行之外的所有内容。对于JSON,在预处理过程中,您可以在ruby中反序列化
    package.JSON
    (我假设您使用它,通过提及
    Gemfile)