Git:从镜像树中删除远程分支

12

我使用以下技术构建了一个代码仓库:

git clone --mirror <url>

我想删除一些远程分支,但是出现了以下错误:

$ git push origin :b
error: --mirror can't be combined with refspecs

...或

$ git push --delete b
fatal: --delete doesn't make sense without any refs

此外,git branch -D b 不影响远程分支。
是否有一种方法可以从镜像克隆中删除远程分支,还是必须建立另一个克隆来完成?
3个回答

5
事实上,您甚至可以在不克隆它的情况下删除任何存储库的任何分支:
git push <url> +:refs/heads/b

唯一的一个警告是,您必须在 Git 存储库内部,任何存储库 - 您甚至可以创建一个空存储库来执行此操作,然后将其删除。
毫无疑问,您也可以在镜像中执行此操作,只要注意只有在执行 git remote prune origin 后才会看到分支消失。

3
如果使用--mirror克隆存储库,则将创建一个裸存储库。这意味着:
Git仅包含版本控制信息,没有工作文件(无树),也不包含特殊的.git子目录。相反,它直接在主目录中包含所有.git子目录的内容。
克隆时的镜像选项旨在创建当前存储库的“原样”副本,包括注释和外部引用。
话虽如此,您正在错误的存储库上执行操作,应该使用原始存储库进行更改,镜像将相应更改。
回答您的问题:
有没有一种方法可以从镜像克隆中删除远程分支,还是我必须为此构建另一个克隆?
据我所知,除了裸存储库不应像非裸存储库一样使用之外,没有其他方法。
也许你需要一个fork,也许你可以更好地解释一下你需要什么。无论如何,自你提出问题以来已经过去了一年。
以下是一些相关的问题和文档:

3
从裸仓库(使用--mirror选项克隆存储库)中,您可以删除镜像仓库中的分支,并使用--mirror选项推送删除操作:
$> git clone --mirror <url>
$> git branch -D branch_to_delete_1
$> git branch -D branch_to_delete_2
$> git push --mirror

它允许一次删除多个分支。
更多信息:https://git-scm.com/docs/git-push

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