为什么git不让我删除远程分支

为什么git不让我删除远程分支,git,git-push,Git,Git Push,我有一个本地存储库,我想镜像到远程“WebRV”。在我删除一个本地分支之前,它一直工作得很好。现在当我这么做的时候 git push --mirror websrv 我明白了 分支“ecoli矩”指向与主、本地和远程相同的提交 对此我可以做些什么,以便正确删除远程分支 更新: 远程存储库是空的,我检查了服务器上的目录(配置文件的bare=true)。这似乎是一个非空的存储库。如果是这样的话,在非裸回购上对签出分支的任何推送操作都将不起作用,git不允许这样做 因此,你基本上需要检查一个不同的分

我有一个本地存储库,我想镜像到远程“WebRV”。在我删除一个本地分支之前,它一直工作得很好。现在当我这么做的时候

git push --mirror websrv
我明白了

分支“ecoli矩”指向与主、本地和远程相同的提交

对此我可以做些什么,以便正确删除远程分支

更新:


远程存储库是空的,我检查了服务器上的目录(配置文件的bare=true)。

这似乎是一个非空的存储库。如果是这样的话,在非裸回购上对签出分支的任何推送操作都将不起作用,git不允许这样做

因此,你基本上需要检查一个不同的分支机构,然后推动回购

从Jan的评论中,一个有用的方法是根本不检查分支,即进入称为
分离头的状态,其中
指向特定修订,而不是分支

这样做的好处是,如果将来对不同的分支进行更多的提交,则不必每次抛出此错误时都签出不同的分支


但是,如果您只是为了备份而这样做,那么最好的方法是在下次以后使用。

即使是裸存储库也有一个当前分支。它是克隆存储库时默认将签出的存储库。Git不想删除它,并告诉您原因

默认分支是特殊
参考。修改它以指向预期始终存在的内容,或指向修订。另见

您必须更改头部指向的位置,以便在服务器上手动使用


或者您可以将错误中提到的选项设置为false(
git config receive.denydeletect current false,在服务器上);如果只是一个备份(
--mirror
通常只适用于备份),那么默认分支实际上并不重要。

一个有用的方法是根本不检查分支,即进入称为“分离头”的状态,
引用指向特定的修订,而不是分支。Git可能会在这样的推动下切换到这种状态,但据我所知,没有人足够关心这个用例来实现它。我确实想到了这一点,但出于这样的目的使用裸回购更有意义。我同意裸回购更好。但是,如果出于某种原因需要工作树,或者现在很难切换,那么可以选择分离的头部。仔细阅读错误,存储库实际上可以是空的@JanHudec揭露了这一错误。。嗯,我想不出什么时候会发生这种情况。是的,但据我所知,它告诉我如何处理错误消息,而不是原因。我猜你没有推到一个
裸的
存储库,也不允许你删除当前在
webserv
@NilsWerner上签出的分支:错误涉及克隆,不工作目录。它不是非裸存储库在推入签出分支时提供的。但是,当我查找该选项的文档时,它确实谈到了非裸存储库。我仍然更相信错误消息,而不是文档,并且认为回购协议可能是完全赤裸裸的。马吕斯,请你这么客气,更新问题,告诉我存储库(在webserv上)是否赤裸裸?git symbolic ref做到了,谢谢。虽然我仍然不知道我是如何改变头部参照的。也许是我在玩gitg时做的…@Marius:可能是你第一次填充存储库时发生的。我如何在服务器上将此设置为false?@rubo77,这取决于服务器的管理方式。Git不提供对它的访问,但是像gitolite这样的一些管理工具具有在服务器存储库中设置选项的接口。
remote: error: By default, deleting the current branch is denied, because the next
remote: error: 'git clone' won't result in any file checked out, causing confusion.
remote: error: 
remote: error: You can set 'receive.denyDeleteCurrent' configuration variable to
remote: error: 'warn' or 'ignore' in the remote repository to allow deleting the
remote: error: current branch, with or without a warning message.
remote: error: 
remote: error: To squelch this message, you can set it to 'refuse'.
remote: error: refusing to delete the current branch: refs/heads/ecoli-moments
To git@141.89.117.199:~/baki_tracking.git
 ! [remote rejected] ecoli-moments (deletion of the current branch prohibited)