2017-04-06 91 views
0

我試圖通過編程來解決合併衝突,即強制合併。 解決合併衝突,如果我嘗試提交我得到下面的異常後:存儲庫狀態在JGit中合併

org.eclipse.jgit.api.errors.WrongRepositoryStateException:無法提交與狀態的存儲庫:合併。

如何更改存儲庫狀態或缺少某些內容。 代碼片段:

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

MergeCommand並不意味着解決合併衝突。相反,如果納入的參考文獻不能沒有衝突地合併,將導致合併衝突。

PullCommand複合命令,首先從上游取出提交,然後嘗試使用MergeCommand合併它們。

爲了以編程方式解決合併衝突,您需要相應地更改本地工作目錄中的文件,將它們添加到索引,然後發出合併提交

有關衝突文件的信息可以在pullResult.getMergeResult()中找到。 A 合併提交可以使用常規CommitCommand創建。

+0

謝謝 但是,你的意思是我需要手動更改本地工作目錄中的文件。 如果存在合併衝突,我只想在文件中進行本地更改。我試圖通過編程來實現這一點。我剛開始探索jgit api。你能幫助我知道如何實現這一點。謝謝 – Jenitta

+0

如果MergeStrategy'ÒURS'足夠用於你的用例,你需要告訴PullCommand使用該策略(即'pullCommand.setStrategy(OURS)'。試試吧? –

+0

嗨,我試過pullCommand.setStrategy(OURS)。它按預期工作。非常感謝...... :) – Jenitta