2017-10-11 12 views
0

私は現在、マスターブランチを新しいリリースブランチにマージして、リリースが正常に動作するかどうかを確認しています(ブランチのマスターとインフラをマージするテストのため)。私はJenkinsのパイプラインスクリプトでこれを行います。 しかし、マージされたすべてのファイルでマージ競合が発生します。私が手に同じことを行うことになっている以下のスクリプトを使用してJenkins Pipeline経由でブランチをマージする

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

:だから、たとえばファイルfoo/bar.txtは私の地元のレポに支店にインフラ結果を変更された場合は、次のようになります結果:

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. 

かなりの設定を試しましたが、Jenkinsが自動的にブランチをマージすることができませんでした。ここでレポをチェックアウトし、私はスニペットジェネレータを使用して作成され、それをマージする必要がある部分があります:

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>']]] 

編集:私はレポをチェックアウトした後、シェルコマンドを経由してマージを実行して、今の回避策を使用しています:

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

テストマージを行うためのきちんとしたアイデア。あなたが得る紛争のタイプは何ですか?それはAuto CRLFのものか、 'release'の実質的なホットパッチが' master'にバックポートされていないのでしょうか?プロジェクト全体のインデントの変更?私は質問の現在の状態に基づいて答えを書くつもりです。 – msanford

答えて

0

マージから生じた紛争があるでしょう場合は、無人プロセスを介してそれらをマージするために、それは事実上不可能です。明らかに、競合がある場合、ブランチはマージする準備ができていません。

さらに、無人プロセスでマージの競合を解決したくない場合は、どのバージョンを選択すればいいのでしょうか?はい、git merge master -X theirsまたはgit merge master -X oursでgitに1つまたは他のブランチを選択させることができますが、これを行う必要があるとワークフローの問題が発生します。

+0

私がgitを理解する限り、ファイルが両方のブランチで変更されていない場合には、まずは矛盾してはいけませんが、それは私がここで扱っている問題です。私のラップトップでテストブランチをマージすると、Jenkinsは他のブランチがファイルに触れていないにもかかわらず、ブランチのいずれかで変更されたすべてのファイルに競合があったのに対し、完璧にうまくいった。 – Julian

関連する問題