【问题标题】:How to avoid conflicts in branch dependent files in mercurial branches?如何避免 mercurial 分支中的分支依赖文件发生冲突?
【发布时间】:2013-10-09 07:42:56
【问题描述】:

我的团队使用 HG 开发了三种不同的环境(每个都是自己的分支):

  • 发布(正在运行的内容)
  • QA(我们正在测试的内容)
  • Dev(我们正在开发的)

当 QA 完成一批更改后,我们会将 QA 合并到 Release 中。然后我们将 Dev 合并到 QA 中。有时,Release 中需要一个修补程序,该修补程序直接提交到 Release 中。然后将 Release 合并到 QA,再将 QA 合并到 Dev。

这个工作流程运行良好,除了一个细节。我们的构建系统在每个分支上引用了不同的 Maven 依赖项。因此,例如,在 QA 中,我们的构建文件可能如下所示:

// build.gradle
apply plugin: 'java'

dependencies {
    // This dependency shouldn't ever change during a merge.
    compile 'internal.lib:lib-qa:1.0'
}

在发布时它可能看起来像这样:

// build.gradle
apply plugin: 'java'

dependencies {
    // This dependency shouldn't ever change during a merge.
    compile 'internal.lib:lib-release:1.0'
}

当我进行任何类型的合并(修补程序或正常)时,mercurial 会更改如下所示的行:

    compile 'internal.lib:lib-release:1.0'

我可以在提交合并之前手动还原此更改,但我想避免此步骤,因为我最终会忘记并破坏 Release。是否有一些练习或技巧可以使这一步变得不必要?

到目前为止,我想出的最好方法是让我的构建检查分支,然后动态确定要使用的依赖项,但这并不令人满意,因为它使我的构建依赖于 HG(而且我遇到了问题当 Gradle 需要 HG 时,Gradle Eclipse 插件无法正常工作)。

【问题讨论】:

    标签: maven mercurial merge gradle dependency-management


    【解决方案1】:

    我不太明白 Gradle Eclipse 和基于查询版本控制动态选择依赖项的问题是什么,但我认为它应该是可以解决的。其他一些方法:

    • 编写仅在特定时间运行(并查询版本控制)的验证任务,例如在发布开始时或完成合并之后。
    • 在构建脚本中编码分支类型(例如作为版本号的一部分);那么您只需要在合并中正确获取一行(并且始终是同一行)。
    • 从外部注入分支类型(默认为 dev),并相应地配置 CI 构建。

    【讨论】:

    • 我不能确定,但​​我认为 Eclipse 问题与路径上的 HG 有关。不过我不能确定。
    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2019-02-28
    • 2022-10-05
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多