我在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命令使其工作。由于克隆已经检出指定的分支,这在我之前并不清楚。
答案 0 :(得分:6)
通过结帐origin/development
(remote 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}}。