как удалить удаленную ветку, когда я получаю сообщение об ошибке?

Я пробовал следующую команду, и она терпит неудачу.

git push origin :next
remote: error: denying ref deletion for refs/heads/next
To blah.git
 ! [remote rejected] next (deletion prohibited)
error: failed to push some refs to 'blah.git

Я использую gitolite и не могу найти это сообщение об ошибке в хуках. Как я могу отключить это, чтобы я мог удалить или переименовать эту удаленную ветку? Когда я запускаю git branch -r -d origin/next, кажется, что он уходит, но следующий git pull возвращает его обратно.


person user561638    schedule 19.04.2011    source источник
comment
Часть сообщения, запрещающая удаление ссылки, исходит от самого Git. См. встроенный/receive-pack.c, строка 369: rp_error (запрещение удаления ссылки для %s, имя);   -  person Matthew McCullough    schedule 21.04.2011
comment
git branch -r -d origin/next удаляет только копию удаленной отслеживаемой ветки на локальном диске. В этом сценарии только push отправляет команды по сети. Таким образом, pull создаст его (кеш) заново. Вы фактически просите его сделать это. Удаленное удаление происходит только через git push REMOTENAME :branchname или git push --delete REMOTENAME имя ветки.   -  person Matthew McCullough    schedule 21.04.2011
comment
Спасибо, Мэтью, так как мне удалить мою удаленную ветку?   -  person user561638    schedule 21.04.2011


Ответы (2)


Убедитесь, что в вашей конфигурации gitolite у вас включен флаг перемотки, поэтому вместо RW используйте RW+. Это позволит вам удалять ветки и коммиты.

git push -f origin :next

person Mohamed Mansour    schedule 19.04.2011
comment
Используете ли вы репозитории с подстановочными знаками? Или просто статически определить каждое репо в конфигурации? - person Mohamed Mansour; 21.04.2011
comment
Держу пари, используя подстановочные знаки. Я узнаю этот тип проблемы по работе. - person ralphtheninja; 27.04.2011
comment
Если это подстановочные знаки, я считаю, что C CREATOR разрешено только удалять ветки, к сожалению. Я могу ошибаться. - person Mohamed Mansour; 27.04.2011

Это похоже на ошибку, которую вы получаете, когда пытаетесь отправить репозиторий с denyDeletes = true. Он предназначен для того, чтобы запретить вам переписывать историю на пульте (обычно сопровождается denyNonFastForwards = true). В этом случае вы можете удалить ветку, только удалив ее на удаленном компьютере; --force не работает.

person ebneter    schedule 20.04.2011
comment
Итак, я админ. Как их отключить? - person user561638; 20.04.2011
comment
неважно. Я нашел строку gitconfig для использования и установил для нее значение false, и я все еще получаю ту же ошибку, когда пытаюсь удалить удаленную ветку. - person user561638; 20.04.2011
comment
Вы установили его на пульте, правильно? Если это все еще не работает, всегда есть метод грубой силы: перейдите на удаленный компьютер и выполните git branch -D next. - person ebneter; 20.04.2011
comment
Даже с gitolite голый репозиторий остается репозиторием. Он отвечает на команды ветки git (например, ssh в поле и cd в папку репо). Это должно делаться с помощью git branch -D имя ветки. Заглавная D означает принудительное удаление. - person Matthew McCullough; 21.04.2011
comment
Это сработало, и это также помогло мне понять, что я должен выполнить git gc в голом репо. так круто! - person user561638; 22.04.2011
comment
git branch -D next у меня не сработал :( @ user561638 не могли бы вы описать, как вы это решили? - person Aguid; 02.06.2021