にコンフリクトがあったプロジェクトのJGitですべてのマージシナリオを実行しようとしています。JGitとマージする前に競合を取得するには?
実際のマージの前に競合を取得することは可能ですか?言い換えれば、JGitとのマージをシミュレートすることは可能ですか?
私のゴールは、プロジェクトのすべてのマージシナリオについて、各ファイルの競合する行にアクセスすることです。
にコンフリクトがあったプロジェクトのJGitですべてのマージシナリオを実行しようとしています。JGitとマージする前に競合を取得するには?
実際のマージの前に競合を取得することは可能ですか?言い換えれば、JGitとのマージをシミュレートすることは可能ですか?
私のゴールは、プロジェクトのすべてのマージシナリオについて、各ファイルの競合する行にアクセスすることです。
ThreeWayMerger
のいずれかを使用して、2つのコミットをマージできるかどうかを判断できます。
デフォルトでは、JGitのMergeCommand
は、の再帰的マージ戦略を使用します。したがって、おそらくこの合併を使いたいと思うでしょう。
コアの合併にを作成してください(newMerger
の第2パラメータをtrue
に設定してください)。このモードでは、合併は作業ディレクトリには触れません。
ThreeWayMerger merger = MergeStrategy.RECURSIVE.newMerger(repository, true);
boolean canMerge = merger.merge(headCommit, commitToMerge);
マージ方法は、そうでなければ所与のコミットをマージすることができればtrue
とfalse
返します。
ベースコミットは、setBase
で明示的に設定することも、共通の祖先を使用することもできます。
ResolveMerger
およびRecursiveMerger
は、どのファイルをマージできないかを照会する方法も提供します。
こんにちは@RüdigerHerrmann、どうすれば 'headCommit'を見つけることができますか? –
refのコミットIDは、 'repository.resolve(" HEAD ")'のように 'Repository'の' resolve'メソッドで解決できます。 –
私はあなたが新しいことを知っています。回答が問題を解決したと感じる場合は、緑色のチェックマークをクリックして「受け入れ済み」とマークしてください。これにより、まだ回答のない古い投稿に焦点を当てることができます。 –
私は@RüdigerHerrmannを理解していますが、助言に感謝します。私はあなたの答えをまだ見ていない。私はJGitのテストクラスに言及した他のSOの質問で見つけたものと似たものを試しました。この道を行くことで、私が望むものを得ることができたようです。私は自分の質問を編集したので、私は自分の目標から最も近いものを提示する。 –
答えを求める必要がない[質問をする](http://stackoverflow.com/help/how-to-ask)の前に、まず最初に**ソリューションを検索して、時間を無駄にしないようにしてください。あなたの編集は実際には異なる質問です。別の疑問がある場合は、新しい投稿を作成してください。 –