私は現在、マスターブランチを新しいリリースブランチにマージして、リリースが正常に動作するかどうかを確認しています(ブランチのマスターとインフラをマージするテストのため)。私は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"
テストマージを行うためのきちんとしたアイデア。あなたが得る紛争のタイプは何ですか?それはAuto CRLFのものか、 'release'の実質的なホットパッチが' master'にバックポートされていないのでしょうか?プロジェクト全体のインデントの変更?私は質問の現在の状態に基づいて答えを書くつもりです。 – msanford