Git如何在不克隆的情况下删除分支?

8

有没有一种方法可以在不进行克隆或任何其他形式的本地复制的情况下从Git存储库中删除分支?

基本上,我正在为发布流水线设计仪表板,不想在仪表板服务器上拥有任何工作项目的代码,只是为了删除已部署的特性分支。

如果有关系的话,我们使用Atlassian Bitbucket(即Stash),而不是Github。

我想做类似于以下操作:

git branch -D ssh://git@repository.com/team/project/feature/deleteme

不能完全称之为重复,但这里有一个类似的问题和一个很好的答案,同样适用于您的情况。更新:啊,也没有本地副本。那么我认为答案是不行,除非Stash在其Web界面中具有此选项。 - D-side
我看到了,问题在于如果您没有项目的本地克隆,则无法使用该方法。 - jdarling
如果您没有本地克隆,那么与该存储库交互的唯一方式是使用Stash Web界面。STASH-3347是一个已实现的功能请求,似乎与此相关。 - D-side
你是不是需要一个Shell命令来以编程的方式完成这个任务? - D-side
好的,也许是时候看看 js-git 或类似的东西了。暂且保持开放状态,以防有人提出建议 :D - jdarling
3个回答

8

从任何 Git 仓库轻松获取

git push <repository url> +:refs/heads/branchname

如果你没有Git仓库可用,那么可以使用git init deleteme在任何地方创建一个垃圾仓库。

有些仓库管理员因为不信任开发者的删除操作而关闭了通过推送删除的权限,因此有些仓库会拒绝这个命令,但这个功能是默认开启的。


键盘到编辑框的警告,我目前在一台借来的机器上,没有可用的git。 - jthill
1
这个到底应该怎么工作?抱歉,我之前没见过。 - jdarling
git init,然后执行get add remote,接着再执行上述操作? - jdarling
不需要添加远程,你可以直接使用URL。 - jthill
2
太好了,终于明白u://r/l是将实际的URL放在那里的提示。我在命令行中尝试了一下,当然很有效。非常感谢。 - jdarling
不确定何时需要使用 +,但这是一般文档:“推送空的 <src> 允许您从远程存储库中删除 <dst> 引用”(参见:https://git-scm.com/docs/git-push#:~:text=githooks%5B5%5D.-,Pushing%20an%20empty,-%3Csrc%3E%20allows%20you) - haridsv

3

您可以使用 Stash REST API (分支工具)。您需要向类似以下URL的地址发送经过身份验证的(详见链接)DELETE请求:

/rest/branch-utils/1.0/projects/{projectKey}/repos/{repositorySlug}/branches

使用参数name指定要删除的分支,还可以使用(可选的?)参数dryRun,根据其名称判断它实际上不会应用更改,但会生成一个响应,好像更改已经应用。

请求可以由几乎任何能够进行身份验证的东西发出。例如,curl可以这样做。


0

如果Stash网页界面没有选项,您将不得不编写一个自定义的git客户端,可能使用jgit来完成此操作。


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