Как слить в JGit?

Как мне слить в JGit?

Допустим, я хочу слить master с foo ветка, как мне это сделать?

3 ответа

Решение

Чтобы объединить, вы можете использовать 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

Мне удобно передавать ObjectId, например

void merge(String uri,File file){
    try(Git git = Git.cloneRepository()
                     .setURI(uri)
                     .setBranch("master")
                     .setDirectory(file)
                     .call()){
        ObjectId objectId = git.getRepository().resolve("origin/develop");
        MergeResult mergeResult = git.merge().include(objectId).call();
        log.debug(mergeResult.getMergeStatus());
    } catch (GitAPIException | IOException e) {
        log.error("error",e);
    }
}

кроме того, вы можете найти больше примеров здесь: https://github.com/centic9/jgit-cookbook

В репозитории JGit вы найдете различные тестовые классы для Merge, включая, например, SimpleMergeTest

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

JGit имеет полноценную реализацию Java стратегии слияния git resol с 2010 года. Если вам нужны примеры, посмотрите на соответствующие тестовые примеры JGit и посмотрите, как EGit использует MergeCommand, посмотрите на класс org.eclipse.egit.core.op.MergeOperation,

Другие вопросы по тегам