How do I do git push with JGit?

git, jgit

Solution

You will find in `org.eclipse.jgit.test` all the example you need:

`RemoteconfigTest.java` uses `Config`:

config.setString("remote", "origin", "pushurl", "short:project.git");
config.setString("url", "https://server/repos/", "name", "short:");
RemoteConfig rc = new RemoteConfig(config, "origin");
assertFalse(rc.getPushURIs().isEmpty());
assertEquals("short:project.git", rc.getPushURIs().get(0).toASCIIString());

PushCommandTest.java illustrates various push scenario, using `RemoteConfig`. See `testTrackingUpdate()` for a complete example pushing an tracking a remote branch. Extracts:

String trackingBranch = "refs/remotes/" + remote + "/master";
RefUpdate trackingBranchRefUpdate = db.updateRef(trackingBranch);
trackingBranchRefUpdate.setNewObjectId(commit1.getId());
trackingBranchRefUpdate.update();

URIish uri = new URIish(db2.getDirectory().toURI().toURL());
remoteConfig.addURI(uri);
remoteConfig.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
    + remote + "/*"));
remoteConfig.update(config);
config.save();


RevCommit commit2 = git.commit().setMessage("Commit to push").call();

RefSpec spec = new RefSpec(branch + ":" + branch);
Iterable<PushResult> resultIterable = git.push().setRemote(remote)
    .setRefSpecs(spec).call();

Problem

I'm trying to build a Java application that allows users to use Git based repositories. I was able to do this from the command-line, using the following commands: ``` git init <create some files> git add . git commit git remote add <remote repository name> <remote repository URI> git push -u <remote repository name> master ``` This allowed me to create, add and commit content to my local repository and push contents to the remote repository. I am now trying to do the same thing in my Java code, using JGit. I was able to easily do git init, add and commit using JGit API. ``` Repository localRepo = new FileRepository(localPath); this.git = new Git(localRepo); localRepo.create(); git.add().addFilePattern(".").call(); git.commit().setMessage("test message").call(); ``` Again, all of this works fine. I couldn't find any example or equivalent code for `git remote add` and `git push`. I did look at this SO question. `testPush()` fails with the error message `TransportException: origin not found`. In the other examples I've seen https://gist.github.com/2487157 do `git clone` before `git push` and I don't understand why that's necessary. Any pointers to how I can do this will be appreciated.

Original source