Подтвердить что ты не робот

Печально известный Git Ошибка: удаленный отказ (не удалось заблокировать)

Я пытаюсь нажать на ветку от моего локального к происхождению. Имя ветки и путь те же. Я толкал и вытягивал из этой ветки какое-то время, и у меня не было проблем. Но внезапно это начало плохо себя вести. В прошлый раз, когда я попытался нажать на начало координат с помощью следующей команды:

git push origin feature/Prizefulfilment

Это дает мне следующее сообщение об ошибке:

72c6c1da98e5cff4484e254a538d9e3b472156ff but expected 0000000000000000000000000000000000000000

У меня Googled, но пока не нашел вполне удовлетворительного решения.

Моя точная ошибка выглядит следующим образом:

$ git push origin feature/Prizefulfilment
Counting objects: 126, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (75/75), done.
Writing objects: 100% (78/78), 8.83 KiB, done.
Total 78 (delta 61), reused 0 (delta 0)
error: Ref refs/heads/feature/Prizefulfilment is at 72c6c1da98e5cff4484e254a538d9e3b472156ff but expected 0000000000000000000000000000000000000000
remote: error: failed to lock refs/heads/feature/Prizefulfilment
To [email protected]:OpusOneSCRUM
 ! [remote rejected] feature/Prizefulfilment -> feature/Prizefulfilment (failed to lock)
error: failed to push some refs to '[email protected]:OpusOneSCRUM'`

Любые идеи?

4b9b3361

Ответ 1

 git push feature/prizeFulfilment: feature/Prizefulfilment

Это похоже на этот ответ:

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

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

Попробуйте выполнить использование одной и той же заглавной буквы между локальными и удаленными ветвями.

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

Ответ 2

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

Если удаленный репозиторий содержит ветвь a/b, и вы пытаетесь нажать ветвь a/b/c, то об ошибке будет сообщено git (определенно это описание ошибки должно быть улучшено).

https://coderwall.com/p/qkofma/a-caution-about-git-branch-names-with-s https://ocroquette.wordpress.com/2011/07/10/git-failed-to-lock/

Ответ 3

Что со мной произошло, так это то, что git менял капитализацию моей локальной ветки. У меня был старый филиал с именем Feature/blahBlah и новая ветвь с именем feature/fooBar. Последний был автоматически переименован в Feature/fooBar, так как git хранит ветки в виде папок, и у меня не может быть одинакового имени папки с различной капитализацией.

Чтобы исправить это, мне пришлось перейти в .git/refs/heads и переименовать "Feature" в "feature" , чтобы все ветки были согласованы.

Ответ 4

Я видел эту ошибку, потому что предыдущая ветвь существовала с тем же именем, что и мое новое имя пути ветки. Пример:

  • Удаленная ветвь: some_feature
  • Локальный имеет ветку: some_feature/some_subfeature
  • Локальный переносит ветвь some_feature/some_subfeature на удаленный
  • Удаленная ошибка: (failed to lock)

Решения:

  • Переименуйте локальную ветвь some_feature/some_subfeature в foo/some_subfeature
  • Удалить удаленную ветвь some_feature

Ответ 5

В моем случае это были неправильно установленные разрешения в репозитории git. Я нашел решение здесь: Как правильно использовать права доступа к групповым файлам в репозитории git?

Проблема заключалась в том, что при создании новой ветки, содержащей путь (feature/Prizefulfilment), папка "feature" создается в "refs/heads", и новая папка наследовала идентификатор группы пользователей, что не позволяло будущим пользователям использовать тот же путь

Чтобы решить эту проблему, вы должны установить setgid для всех каталогов в git-репозитории, чтобы новая папка наследовала свой идентификатор группы, а не идентификатор группы пользователя.

chown -R git:git /path/to/repo
chmod -R g+rw /path/to/repo
find /path/to/repo -type d -print0 | xargs -0 chmod g+s

Ответ 6

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

Удаленная ветвь была INT-4368-some-feature-details, тогда как локальная ветвь была int-4368-some-feature-details.

Чтобы исправить это, я вошел в .git\refs\heads\feature и переименовал имя ветки в соответствии с удаленным. Затем перешел в командную строку и запустил

git checkout INT-4368-some-feature-details

Ответ 7

Когда вы получите такое сообщение, сначала выполните операцию pull из удаленной ветки. Затем выполните операцию push.When кто-то толкает файлы на удаленный сервер, он сдвигает главную ветвь (в случае, если удаленная ветка является ведущей, это может быть любое имя ) в какое-то другое место. Вам нужно обновить это в локальном репозитории, так что начало/мастер в локальном репозитории будет двигаться вперед. Затем добавьте файлы в локальный репозиторий и зафиксируйте его. Затем нажмите кнопку "Операция". Он работал у меня

Ответ 8

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

git branch -m new-name