libgit2sharp删除远程分支。

6
我想在本地和远程删除一个分支。 我的代码:
using (var repository = new Repository(path))
{
    var remote = repository.Network.Remotes["origin"];
    var options = new PushOptions();
    var credentials = options.CredentialsProvider = GetUserCredentialsProvider();
    options.CredentialsProvider = credentials;
    string pushRefSpec = @"refs/heads/:{0}".FormatWith(branch);
    repository.Network.Push(remote, pushRefSpec);
    repository.Branches.Remove(repository.Branches[branch]);
}

但是我遇到了401错误(“未经授权”)。

这是因为分支名称中有“:”的存在。

但我读到说这些冒号是必需的,就像本地git中的“--delete”一样。

感谢任何帮助!


你尝试过只使用 repository.Network.Push(remote, ":branchname"); 吗? - Enrico Campidoglio
是的,相同的结果... - Sergiu
我正在尝试达到相同的效果,但我总是会遇到错误(与身份验证无关),即使使用答案中发布的内容也是如此。你成功做到了吗? - user2173353
2个回答

3

出现了401未经授权错误,因为发起的请求没有授权。要解决此错误,只需将包含您凭据的options传递给Push()方法:

repository.Network.Push(remote, pushRefSpec, options)

这对我来说解决了这个问题。

2
我刚从libgit2源代码中找到了解决方案。
repository.Network.Push(origin, "+:/refs/heads/to-remove-branch")

参考翻译:
refspec 的部分 +:/refs/heads/to-remove-branch 指定了强制删除命令,否则只需使用 :/refs/heads/to-remove-branch 来源:https://github.com/libgit2/libgit2/blob/master/tests/online/push.c

这给了我一个错误:不是有效的引用“分支名称”。该分支存在,所以我不知道为什么会出现这种情况... - user2173353
或者出现错误 invalid refspec +:/refs/heads/branch-name - user2173353
好的,对我来说去掉第一个斜杠就可以了:repository.Network.Push(origin, "+:refs/heads/to-remove-branch", pushOptions); - user2173353

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接