JGit 创建新的本地分支并推送到远程(远程上不存在分支)
JGit create new local branch and push to remote (branch does not exist on remote)
我正在处理一个 ANT 任务,该任务调用一些 java,它使用 JGit 在 git 存储库上创建一个新分支并将其推送到远程。我正在使用 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);
}
src 变量设置为 git 存储库(已被克隆)的路径。
branch 变量设置为:release_2_0_2
force 变量设置为:true 或 false(我都有这个问题)。
之后有一个单独的 ANT 任务来执行推送。
当运行上面的代码在第二个catch中捕获异常:
org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/release_2_0_2 can not be resolved
问题似乎与 setStartPoint("origin/" + branch)
有关,如果我将其硬编码为 "origin/master",它就可以工作。新分支已创建。我只是想在本地创建一个新分支,然后将其推送到远程。我以 为例。
也许我误解了应该如何使用 CreateBranchCommand,我看到的所有示例都是将起点设置为 "origin/" + branch
。
任何 suggestions/clarification 都会有所帮助。
使用setStartPoint()
指定新分支应该基于什么。 setStartPoint
指向的提交将是新分支的初始提交。
如果没有明确指定起点,则默认为 HEAD
。请参阅 Git 文档了解更多详情:https://git-scm.com/docs/git-branch
因此起点必须存在 - 您所指的远程分支显然不存在。
如果您要创建一个新分支,setUpstreamMode()
也没有用。它的目的是在为现有远程分支创建本地分支时配置 tracking。但是由于您还没有远程分支,因此无需调用 setUpstreamMode
.
创建本地分支后,使用 PushCommand
将其发布到远程。
git.push()
.setRemote("origin")
.setRefSpecs(new RefSpec("release_2_0_2:release_2_0_2"))
.call();
以上行将 release_2_0_2
分支推送到已知的远程 origin
(您从中克隆的那个)。
post How do I do git push with JGit? 有更多关于如何使用 JGit 推送的详细信息。
我正在处理一个 ANT 任务,该任务调用一些 java,它使用 JGit 在 git 存储库上创建一个新分支并将其推送到远程。我正在使用 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);
}
src 变量设置为 git 存储库(已被克隆)的路径。 branch 变量设置为:release_2_0_2 force 变量设置为:true 或 false(我都有这个问题)。
之后有一个单独的 ANT 任务来执行推送。
当运行上面的代码在第二个catch中捕获异常:
org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/release_2_0_2 can not be resolved
问题似乎与 setStartPoint("origin/" + branch)
有关,如果我将其硬编码为 "origin/master",它就可以工作。新分支已创建。我只是想在本地创建一个新分支,然后将其推送到远程。我以 为例。
也许我误解了应该如何使用 CreateBranchCommand,我看到的所有示例都是将起点设置为 "origin/" + branch
。
任何 suggestions/clarification 都会有所帮助。
使用setStartPoint()
指定新分支应该基于什么。 setStartPoint
指向的提交将是新分支的初始提交。
如果没有明确指定起点,则默认为 HEAD
。请参阅 Git 文档了解更多详情:https://git-scm.com/docs/git-branch
因此起点必须存在 - 您所指的远程分支显然不存在。
如果您要创建一个新分支,setUpstreamMode()
也没有用。它的目的是在为现有远程分支创建本地分支时配置 tracking。但是由于您还没有远程分支,因此无需调用 setUpstreamMode
.
创建本地分支后,使用 PushCommand
将其发布到远程。
git.push()
.setRemote("origin")
.setRefSpecs(new RefSpec("release_2_0_2:release_2_0_2"))
.call();
以上行将 release_2_0_2
分支推送到已知的远程 origin
(您从中克隆的那个)。
post How do I do git push with JGit? 有更多关于如何使用 JGit 推送的详细信息。