Mercurial stuck " в ожидании блокировки"



получил синий экран в windows при клонировании репозитория mercurial.



после перезагрузки я теперь получаю это сообщение почти для всех команд hg:




c:src>hg commit
waiting for lock on repository c:srcMcVrsServer held by 'x00x00x00x00x00
x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00'
interrupted!


Google не поможет.



какие-либо советы?

515   11  

11 ответов:

при" ожидании блокировки репозитория " удалите файл репозитория:.hg/store/lock или может быть в .hg/wlock

для удаления файла блокировки, вы должны убедиться, что доступ к хранилищу. (Если замок представляет собой строку нулей, это почти наверняка верно).

, когда waiting for lock on working directory, удалить .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 при попытке нажать. Он должен был:

затем его РЕПО снова работал.

EDIT: согласно комментарию @Marmoute-при решении проблем, связанных с блокировкой, используя hg debuglock более безопасная альтернатива к слепо удаление .

Я очень хорошо знаком с кодом блокировки Mercurial (начиная с 1.9.1). Приведенный выше совет хорош, но я бы добавил, что:

  1. Я видел это в дикой природе, но редко и только на машинах Windows.
  2. удаление файлов блокировки является самым простым решением, но вы должны убедиться, что ничто другое не обращается к репозиторию. (Если замок представляет собой строку нулей, это почти наверняка верно).

(для любопытных: я еще не смог поймать причину этого проблема, но подозреваю, что это либо более старая версия 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. Решение состояло в том, чтобы удалить следующие файлы:

  1. .hg / store / phaseroots
  2. .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

    Ничего не найдено.