Làm cách nào để hợp nhất trong JGit?Làm cách nào để hợp nhất trong JGit?
Giả sử tôi muốn hợp nhất master
với chi nhánh foo
, làm cách nào để thực hiện việc này?
Làm cách nào để hợp nhất trong JGit?Làm cách nào để hợp nhất trong JGit?
Giả sử tôi muốn hợp nhất master
với chi nhánh foo
, làm cách nào để thực hiện việc này?
Để 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
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);
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
.
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
@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
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