pth*_*tha 4 java git git-checkout jgit git-branch
我正在研究一个ANT任务,该任务调用一些使用JGit在git存储库上创建新分支并将其推送到远程的java.我正在使用JGit 2.1.0.
这是代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
该SRC变量被设置为git仓库的路径(其已经被克隆).该分支变量设置为:release_2_0_2 的力变量设置为:真或假的(既我有这个问题).
之后有一个单独的ANT任务来完成推送.
运行上面的代码时,第二个catch捕获异常:
org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/release_2_0_2 can not be resolved
Run Code Online (Sandbox Code Playgroud)
问题似乎与setStartPoint("origin/" + branch)如果我硬编码这个"起源/主人"它的工作原理.新分支已创建.我只是尝试在本地创建一个新分支,然后将其推送到远程.我使用/sf/answers/904986211/作为示例.
也许我误解了应该如何使用CreateBranchCommand,我见过的所有例子都是设置起点"origin/" + branch.任何建议/澄清都会有所帮助.
使用setStartPoint()指定哪些新的分支应该在此烯类.setStartPoint指向的提交将是新分支的初始提交.
如果未明确指定起始点,则默认为HEAD.有关更多详细信息,请参阅Git文档:https://git-scm.com/docs/git-branch
因此,起点必须存在 - 您所指的远程分支显然不存在.
setUpstreamMode()如果您要创建新分支,则无用.它旨在为现有远程分支创建本地分支时配置跟踪.但由于你没有远程分支,所以没有必要打电话setUpstreamMode.
创建本地分支后,使用将PushCommand其发布到远程分支.
PushCommand pushCommand = git.push();
pushCommand.setRemote("origin");
pushCommand.setRefSpecs(new RefSpec("release_2_0_2:release_2_0_2"));
pushCommand.call();
Run Code Online (Sandbox Code Playgroud)
上面的行将release_2_0_2分支推送到已知的远程origin(您从中克隆的远程).
帖子我如何使用JGit进行git推送?有关如何推动JGit的更多细节.