3

我在 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 命令使其工作。由于克隆已经签出了指定的分支,这在我之前并不清楚。

4

1 回答 1

6

通过检查origin/development(即上游 repo ' '的远程跟踪分支),您创建了一个分离的 head,即与 0本地分支关联的 head (即,不是与,但在这里与)originrefs/head/developmentrefs/remotes/origin/development

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

您需要确定:

  • 签出本地 ' development' 分支(.setBranch("development")虽然我更喜欢在jgit clone test中使用.setBranch("refs/head/development")它来确保引用本地分支)
  • 使 ' ' 成为 ' origin/development' 的上游分支development
    或者至少,就像在这个jgit push test中一样,使用正确的refspec development:development
于 2013-07-04T05:50:02.530 回答