如何使用JGit删除远程分支

时间:2012-08-09 22:15:13

标签: java git jgit remote-branch

我无法弄清楚如何移除远程分支。

我试图模仿以下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

提前感谢您的想法和解决方案。

4 个答案:

答案 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());
}

希望它有所帮助。