2017-10-11 157 views
0

我目前正在尝试将我们的主分支合并到新版本分支中,以查看该版本是否正常工作(用于测试我合并分支'master'和'infra')。我在Jenkins用管道脚本来做这件事。 但是,我在合并的每个文件中遇到合并冲突。因此,例如,如果文件foo /跳回到bar.txt在分行变更红外线结果在我的本地回购是这样的:通过Jenkins管道合并分支

$ git merge master 
Auto-merging foo/bar.txt 
Merge made by the 'recursive' strategy. 
... 

使用下面的脚本这是应该做的,我得到了同样的事情以下结果:

ERROR: Branch not suitable for integration as it does not merge cleanly: Command "git merge --ff c98425e0c22d1ad35749c5eca03ca44652e22c95" returned status code 1: 
stdout: Auto-merging foo/bar.txt 
CONFLICT (add/add): Merge conflict in foo/bar.txt 
Automatic merge failed; fix conflicts and then commit the result. 

我已经尝试了很多不同的设置,但无法让詹金斯自动合并分支。下面是检查出来的回购,应该把它合并,我使用片断发生器产生的部分:

checkout changelog: true, poll: true, scm: [$class: 'GitSCM', branches: [[name: '*/infra']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'LocalBranch', localBranch: 'infra'], [$class: 'PreBuildMerge', options: [fastForwardMode: 'FF', mergeRemote: 'origin', mergeStrategy: 'MergeCommand.Strategy', mergeTarget: 'master']]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '<id>', name: 'origin', refspec: '+refs/heads/master:refs/remotes/origin/master', url: '<url to repo>']]] 

编辑:我使用的是解决办法,现在通过检查出的回购,然后运行通过shell命令合并:

checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: "${buildGitRevision}"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'WipeWorkspace']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '<id>', url: '<url to repo>']]] 
[...] 
sh "git merge origin/master" 
+1

完成测试合并的想法。你得到什么类型的冲突?它是一个自动CRLF的东西,还是有'释放'上没有backported到'master'的实质性热点?项目范围内的缩进更改?我会根据问题的当前状态写一个答案。 – msanford

回答

0

如果将有来自合并产生的冲突,这几乎是不可能让你通过无人值守的过程合并。显然,如果有冲突,分支还没有准备好合并。此外,您不想通过无人参与的流程解决合并冲突:您怎么知道要选择哪个版本?是的,你可以强制git选择git merge master -X theirsgit merge master -X ours或其他分支,但需要这样做表示工作流问题。

+0

就我理解git而言,如果两个分支中的文件都没有改变,那么不应该有冲突,但这是我在这里处理的问题。在我的笔记本电脑上合并测试分支时工作得很好,而詹金斯在任何分支中更改过的每个文件都发生冲突,即使其他分支未触及该文件。 – Julian

相关问题