Почему git не позволяет мне удалять удаленную ветвь

У меня есть локальный репозиторий, который я хочу отразить на удаленном веб-сервере. Это работало нормально, пока я не удалил локальную ветку. Теперь, когда я делаю

git push --mirror websrv

Я получаю

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 [email protected]:~/baki_tracking.git
 ! [remote rejected] ecoli-moments (deletion of the current branch prohibited)

Филиал "ecoli-moment" указывает на то же самое, что и главный, локальный и удаленный.

Что я могу сделать, чтобы удаленная ветка была удалена правильно?

Update:

Удаленный репозиторий голый, я проверил каталог на сервере (файл конфигурации имеет bare = true).

Ответ 1

Даже у открытого хранилища есть текущая ветка. Это тот, который будет проверен по умолчанию при клонировании репозитория. Git не хочет удалять его и сообщает вам, почему.

Разделение по умолчанию - это специальная ссылка HEAD. Измените это, чтобы указать на то, что должно существовать всегда, или указать на ревизию. См. Также Как установить начало /HEAD?.

Вам нужно будет изменить то, что указывает HEAD, используя git symbolic-ref (1) на сервере.

Или вы можете установить опцию, указанную в ошибке, на false (git config receive.denyDeleteCurrent false на сервере); если только резервная копия (--mirror в основном подходит только для резервного копирования), ветвь по умолчанию не имеет значения.

Ответ 2

Кажется, это не голый репозиторий. Если это так, любая операция нажатия на отмеченную ветку при негладном репо не будет работать, git не позволяет этого.

Итак, вам необходимо проверить другую ветку, а затем нажать на репо.

Из комментария Jan. Полезным методом является проверка вообще никакой ветки, то есть переход к состоянию, известному как detached HEAD, где HEAD ref указывает на конкретную ревизию, а не на ветку.

Преимущество этого заключается в том, что если вы в будущем будете делать больше транзакций для разных ветвей, вам не нужно проверять разные ветки каждый раз, когда эта ошибка возникает.

Лучший способ избежать этого, хотя, если вы делаете это только для резервных копий, следует использовать голый репо в следующий раз.