Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 如何避免mercurial分支中依赖于分支的文件发生冲突?_Maven_Mercurial_Merge_Gradle_Dependency Management - Fatal编程技术网

Maven 如何避免mercurial分支中依赖于分支的文件发生冲突?

Maven 如何避免mercurial分支中依赖于分支的文件发生冲突?,maven,mercurial,merge,gradle,dependency-management,Maven,Mercurial,Merge,Gradle,Dependency Management,我的团队使用HG开发了三个不同的环境(每个环境都是自己的分支): 发布(操作上运行的内容) QA(我们正在测试的内容) 开发(我们正在开发的) 当QA通过一批更改完成时,我们将QA合并到发行版上。然后我们将Dev合并到QA上。有时候,发布版中需要一个热修复程序,它直接提交到发布版中。然后版本合并到QA上,QA合并到开发中 除了一个细节外,这个工作流程运行得非常好。我们的构建系统在每个分支上引用不同的Maven依赖项。例如,在QA上,我们的构建文件可能如下所示: // build.gradle

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

  • 发布(操作上运行的内容)
  • QA(我们正在测试的内容)
  • 开发(我们正在开发的)
当QA通过一批更改完成时,我们将QA合并到发行版上。然后我们将Dev合并到QA上。有时候,发布版中需要一个热修复程序,它直接提交到发布版中。然后版本合并到QA上,QA合并到开发中

除了一个细节外,这个工作流程运行得非常好。我们的构建系统在每个分支上引用不同的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'
}
    compile 'internal.lib:lib-release:1.0'
在发布时,它可能看起来像这样:

// 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'
}
    compile 'internal.lib:lib-release:1.0'
当我进行任何类型的合并(修补程序或普通)时,mercurial会更改如下所示的行:

// 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'
}
    compile 'internal.lib:lib-release:1.0'
我可以在提交合并之前手动还原此更改,但我希望避免此步骤,因为我最终会忘记并中断发布。是否有一些练习或技巧可以使这一步变得不必要


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

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

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

我不能确定,但我认为Eclipse问题与HG在路径上有关。不过我不能肯定。