Сведения о вопросе

profi

04:38, 6th August, 2020

Теги

mercurial    

Mercurial застрял " в ожидании блокировки"

Просмотров: 518   Ответов: 11

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

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

c:\src\>hg commit
waiting for lock on repository c:\src\McVrsServer held by '\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
interrupted!

Google тут не поможет.

Есть какие-нибудь советы?



  Сведения об ответе

ITSME

18:21, 23rd August, 2020

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

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


  Сведения об ответе

repe

17:45, 25th August, 2020

Когда waiting for lock on working directory, удалите .hg/wlock .


  Сведения об ответе

ASER

03:42, 18th August, 2020

У меня была эта проблема с отсутствием обнаруживаемых файлов блокировки. Я нашел решение здесь: 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 лет назад, с помощью процесса на машине, которая больше не находится на LAN. Позор разработчикам hg за то, что они а) не документируют замки должным образом; б) не помечают их для автоматического удаления, когда они становятся устаревшими.


  Сведения об ответе

ЯЯ__4

19:16, 15th August, 2020

У коллеги была именно эта проблема сегодня, после BSoD, когда он пытался нажать. Он должен был это сделать:

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

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


  Сведения об ответе

9090

10:39, 26th August, 2020

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

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

(Для любопытных: я еще не смог уловить причину этой проблемы, но подозреваю, что это либо более старая версия Mercurial, обращающаяся к репозиторию, либо проблема в вызове socket.gethostname() Python для некоторых версий Windows.)


  Сведения об ответе

SSESION

15:41, 20th August, 2020

У меня была такая же проблема на Win 7. Решением было удалить следующие файлы:

.
  1. hg/store/phaseroots
  2. .hg/wlock

Что касается.hg/store/lock - такого файла не было.


  Сведения об ответе

#hash

05:59, 22nd August, 2020

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

Сегодня я получил "waiting for lock on repository" по команде HG push.

Когда я убил команду hung hg, я не мог видеть ее .hg/store/lock

Когда я его искал .hg/store/lock пока команда висела, она существовала. Но файл блокировки был удален, когда команда hg была убита.

Когда я подошел к цели толчка и выполнил HG pull, никаких проблем не возникло.

В конце концов я понял, что процесс ID на HG push был заблокирован ожидающим сообщением, которое каждый раз менялось. Оказывается, что "hg push" висел в ожидании блокировки, удерживаемой самими собой (или, возможно, подпроцессом, я не исследовал дальше).

Оказывается, что два рабочих пространства, назовем их A и B, имели .hg дерево, разделяемое символической ссылкой:

A/.hg --symlinked-to--> B/.hg

Это NOT хорошая вещь, чтобы сделать с Mercurial. Mercurial не понимает концепцию двух рабочих пространств, совместно использующих один и тот же репозиторий. Однако я понимаю, как кто-то, приходящий в Mercurial из другого VCS, может хотеть этого (Perforce хочет, но не DVCS; базар DVCS, как сообщается, может сделать это). Я удивлен, что symlinked REP-ROOT/.hg работает вообще, хотя, кажется, за исключением этого толчка.


  Сведения об ответе

$DOLLAR

15:45, 1st August, 2020

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

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


  Сведения об ответе

lool

11:17, 5th August, 2020

Я столкнулся с этой проблемой на Mac OS X 10.7.5 и Mercurial 2.6.2 при попытке нажать. После обновления до Mercurial 3.2.1 я получил "no changes found" вместо "waiting for lock on repository". Я обнаружил, что каким-то образом путь по умолчанию был установлен так, чтобы указывать на один и тот же репозиторий, поэтому не слишком удивительно, что Mercurial будет путаться.


  Сведения об ответе

lourence

02:17, 17th August, 2020

Если это происходит только на подключенных дисках, это может быть ошибка https://bitbucket.org/tortoisehg/thg/issue/889/cant-commit-file-over-network-share . Использование UNC path вместо буквы диска, кажется, обходит эту проблему стороной.


  Сведения об ответе

qwerty101

03:44, 18th August, 2020

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

hg debuglock показать это: замок: свободный WL: (66722s)

Поэтому я сделал следующую команду, и это исправило проблему для меня: HG debuglocks-W

Используя Win7 и TortoizeHg 4.8.7.


Ответить на вопрос

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