我无法弄清楚如何移除远程分支。
我试图模仿以下GIT命令: git push origin:branchToDelete
以下代码及其与空源的变体:
RefSpec refSpec = new RefSpec();
refSpec = refSpec.setSource("");
// remove branch from origin:
git.push().setRefSpecs(refSpec).add(branchToDelete).call();
抛出和异常如:
org.eclipse.jgit.api.errors.JGitInternalException: Exception caught during execution of push command
at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:175)
at org.gitscripts.DeleteBranchOperation.execute(DeleteBranchOperation.java:27)
at org.gitscripts.Main.main(Main.java:27)
Caused by: java.io.IOException: Source ref doesnt resolve to any object.
at org.eclipse.jgit.transport.RemoteRefUpdate.<init>(RemoteRefUpdate.java:285)
at org.eclipse.jgit.transport.RemoteRefUpdate.<init>(RemoteRefUpdate.java:189)
at org.eclipse.jgit.transport.Transport.findRemoteRefUpdatesFor(Transport.java:612)
at org.eclipse.jgit.transport.Transport.findRemoteRefUpdatesFor(Transport.java:1150)
at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:149)
... 2 more
提前感谢您的想法和解决方案。
答案 0 :(得分:7)
这应该可以帮到你:
//delete branch 'branchToDelete' locally
git.branchDelete().setBranchNames('refs/heads/branchToDelete').call();
//delete branch 'branchToDelete' on remote 'origin'
RefSpec refSpec = new RefSpec()
.setSource(null)
.setDestination("refs/heads/branchToDelete");
git.push().setRefSpecs(refSpec).setRemote('origin').call();
使用jgit 2.0.0.201206130900-r测试
答案 1 :(得分:2)
根据常规git语法,RefSpec()
不应该是::branchToDelete
?
答案 2 :(得分:1)
我从来没有这样做过,但你只是通过指定DeleteBranchCommand
来尝试origin/branchToDelete
吗?
编辑:我特别指Git / JGit通过结构<remote name>/<branch name>
引用远程分支(并使用ListBranchCommand将帮助您确保拼写正确)。
要知道分支名称的确切拼写,您可以使用ListBranchCommand
(不要忘记致电setListMode(REMOTE)
)。
注意:Git允许比JGit更奇怪的行为,所以除非它写在某处,否则不要指望它们。
编辑:我的意思是refspec应该具有以下语法:<remote branch>:<local branch>
(或者可能反过来),但如果你错过了一端,不要指望它在JGit中有效,即使它在Git工作。
答案 3 :(得分:0)
我可以使用它:
StoredConfig config = git.getRepository().getConfig();
config.unsetSection("remote", "origin");
try {
config.save();
} catch (IOException e) {
logger.error(e.getMessage());
}
希望它有所帮助。