JGit:推送到特定分支

时间:2013-07-03 21:45:32

标签: git branch push jgit

我在github上有两个分支:master和development。 我想将新创建的文件推送到开发分支。

    String user = "user";
    String password = "password";
    String localPath = "local";
    String remotePath = "https://github.com/some/git.git";
    Git.cloneRepository().setBranch("refs/heads/development").setURI(remotePath).setDirectory(new File(localPath)).call();
    Git localGit = Git.open(new File(localPath));         
    localGit.checkout().setName("origin/development").setUpstreamMode(SetupUpstreamMode.TRACK).call();

    new File("local/test").createNewFile();

    localGit.add().addFilepattern(".").call();
    localGit.commit().setMessage("message").call();
    localGit.push().setCredentialsProvider(new UsernamePasswordCredentialsProvider(user, password)).call();

我得到的是

  TransportException: Nothing to push.

那里有什么问题?

更新 我可以通过删除checkout命令使其工作。由于克隆已经检出指定的分支,这在我之前并不清楚。

1 个答案:

答案 0 :(得分:6)

通过结帐origin/developmentremote tracking branch'origin'的upstream repo),您创建了一个detached head,是一个与0 本地分支相关联的头(即,不是refs/head/development,而是refs/remotes/origin/development

这就是为什么git push返回“无需推送”的原因,因为没有本地分支收到任何新推送提交。

你需要确定:

  • 检出本地“development”分支(您使用.setBranch("development")进行了分析,但我更喜欢使用.setBranch("refs/head/development")来确保使用origin/development引用当地分支机构)
  • 将'development'设为'development:development'的上游分支 或至少在jgit clone test中使用正确的refspec {{1}}。