我正在处理ANT任务,它调用一些使用JGit在git存储库上创建新分支并将其推送到远程的java。我正在使用JGit 2.1.0。JGit创建新的本地分支并推送到远程(分支不存在于远程)
下面的代码:
CreateBranchCommand bcc;
CheckoutCommand checkout;
Git git;
try {
Repository repo = new FileRepositoryBuilder().readEnvironment().findGitDir(src).build();
git = new Git(repo);
bcc = git.branchCreate();
checkout = git.checkout();
} catch (IOException e) {
throw new BuildException("Could not access repository " + src, e);
}
try {
bcc.setName(branch)
.setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM)
.setStartPoint("origin/" + branch)
.setForce(force)
.call();
checkout.setName(branch);
checkout.call();
}
} catch (Exception e) {
throw new BuildException("Could not checkout repository " + src, e);
}
的SRC变量设置到GIT回购的路径(其已经被克隆)。 的分支变量设置为:release_2_0_2 的力变量设置为:真正或假(既我有这个问题)。
之后有一个单独的ANT任务来执行推送。
当运行上面的代码中的异常被捕获在第二陷阱:
org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/release_2_0_2 can not be resolved
这个问题似乎是与setStartPoint("origin/" + branch)
如果我硬编码这“起源/主”它的工作原理。新的分支被创建。我只是试图在本地创建一个新的分支,然后将其推送到远程。我以https://stackoverflow.com/a/12928374/1860867为例。
也许我误解了CreateBranchCommand应该如何使用,我见过的所有例子都将起始点设置为"origin/" + branch
。 任何建议/澄清将有所帮助。
感谢您的信息和澄清。我认为问题是我试图使用的代码只能用于现有的远程分支。我可以使用一个标志来指示分支不存在于远程,然后使用你的逻辑。 – ptha
很高兴帮助。我发现写下实现目标所需的本机Git命令序列并将它们翻译成JGit API调用有时很有用。 –