2017-04-06 9 views
0

マージの競合をプログラムで解決しようとしています。つまり、マージを強制します。リポジトリの状態JGitでのマージ

org.eclipse.jgit.api.errors.WrongRepositoryStateException:マージ:状態でリポジトリにコミットすることはできません私は、以下の例外を取得コミットしようとした場合、マージの競合を解決した後 。

リポジトリステータスを変更するにはどうすればよいですか、何か不足していますか? コードスニペット:

MergeCommand
if((RepositoryState.SAFE == pullCommand.getRepository().getRepositoryState())) { 
    PullResult result = pullCommand.call(); 
    if(MergeStatus.CONFLICTING == result.getMergeResult().getMergeStatus()){ 

    mgCmd = git.merge(); 
    mgCmd.include(repo.getRef("refs/remotes/origin/development")); 
    mgCmd.setStrategy(MergeStrategy.OURS); 
    mgCmd.setCommit(true); 
    res = mgCmd.call(); 
    System.out.println("Failing Path ==="+res.getFailingPaths()); 
    pullCommand.getRepository().resolve("C:\\CODE\\thin\\thinclient\\.git"); 
    if(res.getMergeStatus().equals(MergeResult.MergeStatus.CONFLICTING)){ 
     System.out.println("Merge status=========+++"+res.getMergeStatus()); 
    } 

答えて

0

は、マージの競合を解決するものではありません。これとは逆ですが、含まれているref(s)を衝突なくマージできない場合、マージの競合が発生します。

PullCommandまず上流側からコミットをフェッチし、次いでMergeCommandを使用してマージしようと複合コマンドあります。

マージの競合をプログラムで解決するには、それに応じてローカル作業ディレクトリのファイルを変更してインデックスに追加し、マージコミットを発行する必要があります。

競合するファイルに関する情報はpullResult.getMergeResult()にあります。 マージコミットは、通常のCommitCommandで作成できます。

+0

ありがとう しかし、私は手動でローカル作業ディレクトリのファイルを変更する必要があることを意味しますか。 マージの競合がある場合は、ファイルのローカル変更のみを行います。そして私はこれをプログラム的に達成しようとしています。私はちょうどjgit apiを探索し始めました。ありがとうございます – Jenitta

+0

あなたのユースケースではMergeStrategy 'ÜURS'が十分であれば、その戦略を使用するようPullCommandに伝える必要があります(' 'pullCommand.setStrategy(OURS)')。それを試してみますか? –

+0

こんにちは、私はpullCommand.setStrategy(OURS)を試しました。それは期待どおりに働いています。 – Jenitta

関連する問題