如何通过LibGit2Sharp API正确调用Push方法删除远程分支
libgit2sharp 删除远程分支的正确调用方法
Push方法抛空参数异常的解决
你当前使用的Push(Remote remote, String objectish, String destinationSpec)重载强制要求objectish参数不能为null,所以传null会触发ArgumentNullException。
删除远程分支的逻辑和原生git的refspec规则一致:向远程仓库推送空值覆盖对应分支引用即可完成删除,正确的调用方式如下:
// 写法1:使用单refspec参数的重载,格式为 :<远程分支完整引用路径> Repo.Network.Push(Repo.Network.Remotes["origin"], $":refs/heads/{branchName}"); // 写法2:仍用三参数重载,将objectish传空字符串而非null Repo.Network.Push(Repo.Network.Remotes["origin"], objectish: string.Empty, destinationSpec: $"refs/heads/{branchName}");
如果需要配置身份验证、代理等推送参数,可以使用带PushOptions的重载:
var pushOptions = new PushOptions { CredentialsProvider = (url, usernameFromUrl, types) => new UsernamePasswordCredentials { Username = "你的账号", Password = "你的token/密码" } }; Repo.Network.Push(Repo.Network.Remotes["origin"], $":refs/heads/{branchName}", pushOptions);
Branches.Remove方法不生效的原因
你调用的Repo.Branches.Remove(remoteBranchName, true)仅会删除本地存储的远程跟踪分支副本,也就是你本地仓库中记录的origin/xxx引用标识,整个过程不会和远程仓库产生任何交互,自然不会修改远程仓库的实际分支。该方法仅适用于清理本地失效的远程跟踪分支记录,无法用于删除远程仓库分支。
内容的提问来源于stack exchange,提问作者Atiq Rahman
相关产品推荐
相关产品推荐

