在TFS git仓库中删除远程分支

31
我们正在Team Foundation Service中使用Git,并尝试通过运行以下命令来找到删除远程分支的方法。
git push origin --delete TheBranchName

远程服务器一直拒绝并显示以下错误。
 ! [remote rejected] TheBranchName (TF401026: The ForcePush permission is required to perform this action.) error: failed to push some refs to 'https://xxx.visualstudio.com/DefaultCollection/_git/Xxxxxx'

你有没有想过如何在TFS中为用户设置正确的权限?


3
似乎你没有足够的权限执行此操作。这个命令本来就是正确的。 - iberbeu
7个回答

23

可以通过以下方式访问代码库的安全选项:
1. Code->浏览器
2. 从浏览器中选择一个代码库
3. 在代码库的细节页面,应该点击代码库旁边的名称。
4. 选择"管理代码库..."菜单

在这里,您可以为代码库及其分支配置每个贡献者组和个人用户的权限。 "重写和销毁历史记录(强制推送)"选项应该是允许或继承允许,以便能够强制推送。


我不得不明确地将自己添加进去并赋予自己该权限,然后它就起作用了。 - matthewpavkov

8
要删除远程分支,您可以使用以下命令:
git push origin :TheBranchName

1
我尝试了 "git push origin --delete BranchName",但出现了一个错误,提示我没有所需的权限 - 然后我按照您的建议使用了 "git push origin :BranchName",这时它提示我输入我的凭据,然后就成功了!为什么会这样? - Omaer

3
我想编辑 Ursegor 的回答,但我没有足够的声望来这样做。
在版本 14.102.25423.0(Team Foundation Server 2015 Update 3)中,可以通过以下步骤访问存储库的安全/权限选项:
  1. Code/Explorer
  2. 从“资源管理器”中选择一个存储库
  3. 点击存储库名称旁边的三个点 ...
  4. 选择安全

3

git push 的手册页中:

-f
--force
    Usually, the command refuses to update a remote ref that is not an ancestor of the
    local ref used to overwrite it. This flag disables the check. This can cause the
    remote repository to lose commits; use it with care.

看起来你想要删除的分支不是你所在分支的祖先 -- 添加--force参数,看看是否有帮助。


2
在这个链接中的第一个答案和第一条评论中回答了你的问题:
“有人在远程存储库中启用了钩子,禁止删除 - 这通常是为了防止某人将重新基于分支推送到存储库中。 (我维护着一个相当大的git存储库集合,它们都配置成这样,尽管没有使用钩子。)
在远程仓库的hooks/目录中查找。会有一个名为“update”的脚本;这就是拒绝让你删除该分支的原因。”

1
该问题涉及到 TFS,它不支持远程钩子。实际上,它是支持的,只不过不是通过 hooks/ 目录 - 你必须编写一个 TFS 事件处理程序,例如 http://almsports.net/tfs-server-side-check-in-policy-for-git-repositories/1025/。 - Mike Dimmick

1
我在搜索删除VSO分支的方法时找到了这个问题。对于其他人,我有一个过程,虽然有点繁琐,但很有效。从该分支创建拉取请求。一旦创建了拉取请求,请放弃它。一旦您放弃了该请求,就会出现一个删除源分支按钮。单击该按钮即可删除该分支。

如果它能正常工作就太好了。我刚试过 - 点击“放弃”后,只有“重新激活”按钮,没有任何“删除”选项。 - JustAMartin

0

我只需要打开Git UI工具,打开仓库并从那里删除分支,它就可以正常工作了。我无法从TFS中完成这个操作。


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