Usage of 'pull' command in Jgit

Izza picture Izza · Nov 15, 2012 · Viewed 13.5k times · Source

I'm a new user of git and am using JGit to interact with a remote git repository. In JGit, I used CloneCommand to initially to clone a repo, and it worked without a issue. However, when I try to use PullCommand, which is the equivalent of SVN update AFAIK, the local repo contents are not updated.

This is the code that I used:

private String localPath;
private Repository localRepo;
private Git git;

localPath = "/home/test/git_repo_test";
remotePath = "https://github.com/test/repo_1.git";

try {
    localRepo = new FileRepository(localPath + "/.git");
} catch (IOException e) {
    e.printStackTrace();  
}
git = new Git(localRepo);

PullCommand pullCmd = git.pull();
try {
    pullCmd.call();
} catch (GitAPIException e) {
    e.printStackTrace();  
}

This doesn't update the local repository for new files which I have pushed to the remote repository using the command line. However, if I delete the local repository and take a clone again, all the changes are reflected.

Please let me know what is the correct approach of using PullCommand in JGit.

EDIT:

The structure of the remote repository:

root ____ file_1
  |______ directory_1
              |__________ file_2 
              |__________ file_3

directory_1 and the two files are pushed from the commandline after the initial cloning and I tried this code so that it will get reflected in the local repository, which is not happening.

The code used to clone the repository:

File file = new File(localPath);
CloneCommand cloneCmd = git.cloneRepository();
try {
    cloneCmd.setURI(remotePath)
            .setDirectory(file)
            .call();
} catch (GitAPIException e) {
    e.printStackTrace();  
}

Here, git, localPath and remotePath are the same variable as above.

Answer

robinst picture robinst · Nov 15, 2012

I suspect the problem is that the current branch has no upstream configuration (and so pull won't merge the fetched branch).

To see what happened during the pull, inspect the result of pullCmd.call():

PullResult result = pullCmd.call();
FetchResult fetchResult = result.getFetchResult();
MergeResult mergeResult = result.getMergeResult();
mergeResult.getMergeStatus();  // this should be interesting