2012-08-27 20 views

Trả lời

7

Để hợp nhất, bạn có thể sử dụng MergeCommand (trong gói org.eclipse.jgit.api), sau một CheckoutCommand. Để cung cấp cho bạn một ví dụ, bởi vì thực sự Jgit thiếu ví dụ:

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 
} 

Tôi không thử đoạn code để nó có thể không được hoàn hảo, nhưng nó chỉ là để cung cấp một sự khởi đầu. Và tôi không bao gồm hàng nhập khẩu. Phát triển với JGit ngụ ý rất nhiều lần thử dựa trên javadoc

4

Bạn sẽ tìm thấy trong JGit repository khác nhau test classes for Merge, bao gồm ví dụ các SimpleMergeTest

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

Liên kết tương tự mà bạn đã cung cấp cho Github nói rằng việc hợp nhất là một tính năng bị thiếu. Có chuyện gì thế? – Tower

+0

@rFactor Có thể là trường hợp nếu nó chỉ cung cấp một trình bao bọc xung quanh lệnh 'git merge' thay vì thực thi java hoàn toàn nguyên bản, nhưng dường như không còn là trường hợp nữa. – VonC

+0

bạn có thể xác nhận điều đó không? Tôi không phải trên một máy dev vì vậy tôi không thể tìm ra nhiều vào thời điểm này, hoặc tôi sẽ chỉ kiểm tra nó tại một số điểm và đăng ở đây phát hiện của tôi. – Tower

2

JGit đã thực thi Java đầy đủ về chiến lược hợp nhất git giải quyết từ năm 2010. Nếu bạn cần xem ví dụ về các trường hợp kiểm tra JGit tương ứng và xem EGit là như thế nào sử dụng MergeCommand, xem lớp org.eclipse.egit.core.op.MergeOperation.

Các vấn đề liên quan