2012-08-27 59 views

回答

7

要合併,你可以使用MergeCommand(封裝org.eclipse.jgit.api),一個CheckoutCommand後。爲您提供一個例子,因爲確實Jgit缺乏例子:

Git git = ... // you get it through a CloneCommand, InitCommand 
       // or through the file system 

CheckoutCommand coCmd = git.checkout(); 
// Commands are part of the api module, which include git-like calls 
coCmd.setName("master"); 
coCmd.setCreateBranch(false); // probably not needed, just to make sure 
coCmd.call(); // switch to "master" branch 

MergeCommand mgCmd = git.merge(); 
mgCmd.include("foo"); // "foo" is considered as a Ref to a branch 
MergeResult res = mgCmd.call(); // actually do the merge 

if (res.getMergeStatus().equals(MergeResult.MergeStatus.CONFLICTING)){ 
    System.out.println(res.getConflicts().toString()); 
    // inform the user he has to handle the conflicts 
} 

我沒有嘗試的代碼,所以它可能不是完美的,但它只是提供一個開始。我沒有包括進口。與JGit發展意味着大量基於該javadoc

4

你會發現在JGit repository各種test classes for Merge,包括例如在SimpleMergeTest

Merger ourMerger = MergeStrategy.OURS.newMerger(db); 
boolean merge = ourMerger.merge(new ObjectId[] { db.resolve("a"), db.resolve("c") }); 
assertTrue(merge); 
+0

您給Github的鏈接表明合併是一個缺失的功能。那是怎麼回事? – Tower

+0

@rFactor它可能是這樣的情況,如果它只提供'git merge'命令而不是完全原生的java實現的包裝,但似乎不再是這種情況。 – VonC

+0

你能確認嗎?我不在開發機器上,所以在這一點上我無法弄清楚,或者我只是在某個時候檢查它並在這裏發佈我的發現。 – Tower

2

JGit的嘗試已自2010年以來一個完全成熟的Java實現的git解決合併的策略。如果你需要的例子看相應JGit測試案例,看一看例如:It如何使用MergeCommand,請參閱類org.eclipse.egit.core.op.MergeOperation