Mercurial stuck " в ожидании блокировки"
получил синий экран в windows при клонировании репозитория mercurial.
после перезагрузки я теперь получаю это сообщение почти для всех команд hg:
c:src>hg commit
waiting for lock on repository c:srcMcVrsServer held by 'x00x00x00x00x00
x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00'
interrupted!
Google не поможет.
какие-либо советы?
11 ответов:
при" ожидании блокировки репозитория " удалите файл репозитория:
или может быть в.hg/store/lock.hg/wlockдля удаления файла блокировки, вы должны убедиться, что доступ к хранилищу. (Если замок представляет собой строку нулей, это почти наверняка верно).
У меня была эта проблема без обнаруженных файлов блокировки. Я нашел решение здесь: http://schooner.uwaterloo.ca/twiki/bin/view/MAG/HgLockError
вот расшифровка из Tortoise Hg Workbench console
% hg debuglocks lock: user None, process 7168, host HPv32 (114213199s) wlock: free [command returned code 1 Sat Jan 07 18:00:18 2017] % hg debuglocks --force-lock [command completed successfully Sat Jan 07 18:03:15 2017] cmdserver: Process crashed PaniniDev% hg debuglocks % hg debuglocks lock: free wlock: free [command completed successfully Sat Jan 07 18:03:30 2017]после этого прерванная тяга прошла успешно.
блокировка была установлена более 2 лет назад с помощью процесса на машине, которая больше не находится в локальной сети. Позор разработчикам hg за а) не документирование блокировок адекватно; б) не timestamping их для автоматического удаления, когда они черствеют.
у коллеги была эта точная проблема сегодня, после BSoD при попытке нажать. Он должен был:
- удалить файл
.hg/store/lock(согласно принято отвечать)- удалить файл
.hg/store/phaseroots(согласно это сообщение об ошибке TortoiseHG)затем его РЕПО снова работал.
EDIT: согласно комментарию @Marmoute-при решении проблем, связанных с блокировкой, используя
hg debuglockболее безопасная альтернатива к слепо удаление .
Я очень хорошо знаком с кодом блокировки Mercurial (начиная с 1.9.1). Приведенный выше совет хорош, но я бы добавил, что:
- Я видел это в дикой природе, но редко и только на машинах Windows.
- удаление файлов блокировки является самым простым решением, но вы должны убедиться, что ничто другое не обращается к репозиторию. (Если замок представляет собой строку нулей, это почти наверняка верно).
(для любопытных: я еще не смог поймать причину этого проблема, но подозреваю, что это либо более старая версия Mercurial, обращающаяся к репозиторию, либо проблема в сокете Python.вызов gethostname () для определенных версий Windows.)
Я не ожидаю, что это будет выигрышный ответ, но это довольно необычная ситуация. Упоминания на случай, если кто-то, кроме меня, столкнется с этим.
сегодня я получил "ожидание блокировки на репозитории" по команде HG push.
когда я убил команду hung hg, я не мог видеть нет .hg / store / lock
когда я искал .hg / store / lock пока команда висела, она существовала. Но файл блокировки был удален, когда команда hg была убита.
когда я пошел к цели нажима, и исполненной тяге hg, никакая проблема.
В конце концов я понял, что идентификатор процесса на HG push был блокировкой ожидающего сообщения менялся каждый раз. Оказывается, что" HG push " висел в ожидании блокировки, удерживаемой самой собой (или, возможно, подпроцесса, я не исследовал дальше).
получается, что два рабочих пространства, назовем их A и B, имели .деревья hg, разделяемые символической ссылкой:
A/.hg --symlinked-to--> B/.hgЭто не очень хорошая вещь, чтобы сделать с Деятельный. Mercurial не понимает концепцию двух рабочих пространств, совместно использующих один и тот же репозиторий. Однако я понимаю, как кто-то, приходящий на Mercurial из другого VCS, может этого хотеть (волей-неволей, хотя и не DVCS; базарные DVCS, как сообщается, могут это сделать). Я удивлен, что символический REP-ROOT/.hg работает вообще, хотя, кажется, за исключением этого толчка.
У меня была такая же проблема на Win 7. Решение состояло в том, чтобы удалить следующие файлы:
- .hg / store / phaseroots
- .hg / wlock
как для .hg / store / lock-такого файла не было.
Если заблокированный РЕПО был оригиналом, я не могу себе представить, что это было модификации Он клонировал его, поэтому он только мешал вам изменить его в середине и испортить клон. Это должно быть хорошо после снятия блокировки.
новая клонированная копия (если это был локальный клон) может быть в любом виде искаженного состояния, поэтому вы должны выбросить ее и начать все сначала. (Если бы это был удаленный клон, я бы надеялся, что он потерпел неудачу и уже выбросил неполный копировать.)
Если это происходит только на подключенных дисках, это может быть ошибка https://bitbucket.org/tortoisehg/thg/issue/889/cant-commit-file-over-network-share. Использование UNC-пути вместо буквы диска, похоже,обходит проблему.
Я столкнулся с этой проблемой на Mac OS X 10.7.5 и Mercurial 2.6.2 при попытке нажать. После обновления до Mercurial 3.2.1 я получил "никаких изменений не найдено "вместо"ожидание блокировки репозитория". Я узнал, что каким-то образом путь по умолчанию был установлен, чтобы указать на тот же репозиторий, поэтому неудивительно, что Mercurial будет запутываться.
У меня была та же проблема. Получил следующее сообщение, когда я попытался совершить: ждем блокировки на рабочем каталоге удерживаемого"
HG debuglock показать это: замок: свободный wlock: (66722s)
поэтому я сделал следующую команду, и это исправило проблему для меня: HG debuglocks-W
использование Win7 и TortoizeHg 4.8.7.
Comments