JGit merge Repo A into forked version repo B, where A is ahead of B

49 Views Asked by At
final Git repoAgit = Git.cloneRepository()
            .setURI(repoAgitUrl)
            .setDirectory(new File(repoApath))
            .setBranchesToClone(Arrays.asList("refs/heads/develop"))
            .setBranch("refs/heads/develop")
            .setTransportConfigCallback(TRANSPORT_CONFIG_CALLBACK)
            .call();
final Git repoBgit = Git.cloneRepository()
            .setURI(repoBgitUrl)
            .setDirectory(new File(repoBpath))
            .setBranchesToClone(Arrays.asList("refs/heads/develop"))
            .setBranch("refs/heads/develop")
            .setTransportConfigCallback(TRANSPORT_CONFIG_CALLBACK)
            .call();

How do I merge repoA into repoB, where repoA is supposed to be ahead of repoB, and repoB is a forked version of repoA?

1

There are 1 best solutions below

0
Rüdiger Herrmann On

First, in repoB, create a remote that references repoA.

Then fetch from this remote so that there are two local branches: refs/heads/develop and refs/remotes/repoa/develop.

If not yet done, checkout the target branch refs/heads/develop in repoB.

Call the MergeCommand to merge the remote tracking branch into HEAD.

For example:

repoB.remoteAdd().setName("repoa").setUri(new URIish("/path/to/repoA")).call();
repoB.fetch().setRemote("repoa").call();
MergeResult mergeResult = repoB.merge()
    .include(repoB.getRepository().resolve("refs/remotes/repoa/develop"))
    .call();