머큐리얼이 "잠금 대기 중"으로 멈춤


346

수은 저장소를 복제하는 동안 Windows에 블루 스크린이 표시됩니다.

재부팅 후, 거의 모든 hg 명령에 대해이 메시지가 나타납니다.

c : \ src \> hg 커밋
'\ x00 \ x00 \ x00 \ x00 \ x00 \이 (가) 보유한 저장소 c : \ src \ McVrsServer에서 잠금 대기 중
x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 '
중단!

Google은 도움이되지 않습니다.

팁이 있습니까?


3
와우, 나는 또한 커밋하는 동안 블루 스크린을 가지고 있었고 같은 오류가 발생했습니다. 나는 유일한 사람이 아니라 다행입니다!
CBarr

답변:


489

"저장소 잠금 대기 중"일 때 저장소 파일을 삭제하십시오 .hg/wlock(또는 파일 이있을 수 있음 .hg/store/lock).

잠금 파일을 삭제할 때 저장소에 액세스중인 다른 것이 없어야합니다. (자물쇠가 0의 문자열이거나 공백이면, 이것은 거의 사실입니다.)


103
내 문제는 복제 또는 BSOD와 관련이 없지만 잠금을 해제하기 위해 .hg / wlock 파일을 삭제했습니다.
프랭크 하더

32
hg recover잠금 상태가 깨진 후에 실행해야합니다.
James Broadhead

9
많은 감사-.hg / wlock을 제거한 후 문제가 무엇인지 전혀 몰랐습니다
Andrew Buss

34
필자의 경우 (Mercurial 2.7.2가 포함 된 TortoiseHg V2.9.2) 파일 이름은 "lock"대신 "wlock"입니다. ".hg / store"가 아닌 ".hg"디렉토리에 배치되었습니다.
Fernando

7
@Marmoute-변경이 이루어질 때마다 저장소가 잠 깁니다. 어떤 프로세스로 인해 프로세스가 실패하는 경우 (예 : Mercurial의 버그, 시스템 다운 등) 잠금 파일이 정리되지 않고 남아 있습니다. 여기에서 잠금 파일을 수동으로 삭제하기위한 제안은 리포지토리가 "불량"상태로 남아있는 경우를 해결하기위한 것입니다. 이것을 "수은 보호를 맹목적으로 제거"라고 부르는 것은 이러한 경우에 무슨 일이 일어나고 있는지에 대한 공정하고 정확한 특성이 아닙니다.
JoGusto

345

일 때 waiting for lock on working directory삭제하십시오 .hg/wlock.


6
이것은 나를위한 경우였습니다. 그것은 'nix와 현재의 심볼릭 링크였습니다 server:pid. 무리 감사. 그런 다음 $ hg recover기존 저널 (및 커밋 메시지)을 지우 려고 실행 해야했습니다 ctrl+c. 확실하지 않지만 $ hg recover잠금 파일을 삭제하지 않고 실행할 수 있으며 자동으로 실행 됩니다. 내가 생각할만한 가치가 있습니다.
sholsinger

2
@sholsinger가 잠금을 먼저 제거하지 않으면 hg recover 실행이 작동하지 않는다고 말하는 것에 대한 참고 사항입니다. 나는 그것을 시도했다.
Dan

1
다른 이유로 리포지토리에서 작업중인 리포지토리가 잠겨 있습니다. 수은 보호를 맹목적으로 제거하는 대신 해당 프로세스를 찾아 종료해야합니다. 파일을 삭제하면 리포지토리가 손상 될 수 있습니다.
Marmoute

@Marmoute 내 경우에는 다른 프로세스가 repo에서 작동하지 않았기 때문에 잠금을 제거해야했습니다. 그러나 다른 프로세스를 먼저 찾아 볼 가치가 있다는 것에 동의합니다.
Mi-La

당기지 않고 며칠 동안 아무 문제없이 당기고 밀고 나면이 메시지가 갑자기 나타납니다. 파일을 삭제 한 후 문제가 해결되었습니다. 파일은 0KB 였으므로 비어 있다고 생각합니다. 단순히 파일을 삭제해도 괜찮습니까? 나는 그것이 보호에 유용하다고 생각합니다.
벤 잉어

47

감지 할 수있는 잠금 파일이없는이 문제가있었습니다. 여기에서 해결책을 찾았습니다 : http://schooner.uwaterloo.ca/twiki/bin/view/MAG/HgLockError

Tortoise Hg Workbench 콘솔의 대화 내용은 다음과 같습니다.

% 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]

이 후 중단 된 풀이 성공적으로 실행되었습니다.

더 이상 LAN에없는 시스템의 프로세스에 의해 잠금이 2 년 전에 설정되었습니다. a) 잠금 장치를 적절하게 문서화하지 않음; b) 시간이 지나면 자동 제거를 위해 타임 스탬프를 작성하지 않습니다.


23
팁 : wlock잠겨있는 사람인 경우hg debuglocks --force-wlock
Brad Turek

5
나는 7 년 이상 거북이 hg를 사용했습니다. 약 3 개월 전까지는 문제를 본 적이 없습니다. 지난 3 개월 동안 3 번 봤습니다. 일부 업데이트로 인해 문제가 악화되었을 수 있습니다.
d ei

20

동료는 푸시하려고하는 동안 BSoD 후에 오늘이 정확한 문제를 겪었습니다. 그는해야했다 :

그런 다음 그의 repo는 다시 일했습니다.

편집 : @ Marmoute의 의견에 따라 잠금 관련 문제를 처리 할 때 hg debuglock맹목적으로 .hg/store/lock파일을 삭제하는 것보다 안전 합니다.


2
1) phaseroots 파일을 터치해야 할 이유는 없으며 잠금과 전혀 관련이 없습니다. 2) wlock을 맹목적으로 제거하는 것은 나쁜 생각입니다.이를 사용하는 다른 프로세스가있을 수 있습니다. hg debuglock을 사용하여 발생하는 상황을 파악하고 잠금을 유지하는 프로세스를 종료하십시오.
Marmoute

3
1) 그것을 제거하면 문제가 해결되었다는 것을 고려할 때 동의하지 않아야합니다. 2) 당시 hg debuglock에 대해 알지 못했고 (문서도 찾을 수 없음) 시스템이 재부팅에서 나온 것이므로 저장소를 잠그는 것이 없었으므로 잠금 파일을 삭제하는 것이 적절했습니다.
Ian Kemp

12

Mercurial의 잠금 코드에 매우 익숙합니다 (1.9.1 기준). 위의 조언은 좋지만 다음과 같이 추가합니다.

  1. 나는 이것을 야생에서 보았지만 드물게 Windows 시스템에서만 보았습니다.
  2. 잠금 파일을 삭제하는 것이 가장 쉬운 해결 방법이지만 저장소에 액세스중인 다른 파일이 없어야합니다. (자물쇠가 0의 문자열이면 거의 확실합니다.)

(호기심 :이 문제의 원인을 아직 파악할 수 없었지만 저장소에 액세스하는 이전 버전의 Mercurial이거나 특정 버전의 Windows에서 Python의 socket.gethostname () 호출의 문제라고 생각합니다.)


2
그것은 우분투에서 나에게 일어난 일이다. 몇 주 만에 처음으로 저장소를 사용했기 때문에 해당 상태로 남겨둔 것이 무엇인지 기억이 나지 않습니다.
Cosmologicon

7

Win 7에서 동일한 문제가 발생했습니다. 해결책은 다음 파일을 제거하는 것이 었습니다.

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

.hg / store / lock에 관해서는 그러한 파일이 없었습니다.


Stackoverflow에 오신 것을 환영합니다. 게시물에 더 많은 콘텐츠를 추가해보세요
NJInamdar

5
1) phaseroots 파일을 터치해야 할 이유는 없으며 잠금과 전혀 관련이 없습니다. 2) wlock을 맹목적으로 제거하는 것은 나쁜 생각입니다.이를 사용하는 다른 프로세스가있을 수 있습니다. 사용 hg debuglock이 일어나고있는 것을 파악하고 잠금을 보유하는 프로세스를 종료 할 수 있습니다.
Marmoute

6

나는 이것이 답이 될 것으로 기대하지는 않지만 상당히 특이한 상황입니다. 내가 아닌 다른 사람이 부딪 칠 경우를 언급하십시오.

오늘 저는 hg push 명령으로 "저장소 잠금 대기 중"을 받았습니다.

hung hg 명령을 죽였을 때 .hg / store / lock이 보이지 않습니다.

명령이 중단 된 동안 .hg / store / lock을 찾을 때 존재했습니다. 그러나 hg 명령이 종료되면 잠금 파일이 삭제되었습니다.

내가 푸시 대상으로 가서 hg pull을 실행했을 때 아무런 문제가 없습니다.

결국 hg 푸시의 프로세스 ID는 잠금 대기 메시지가 매번 변경된다는 것을 깨달았습니다. "hg push"가 자체적으로 보유한 잠금을 기다리는 중입니다 (또는 하위 프로세스 일 수도 있습니다. 더 이상 조사하지 않았습니다).

A와 B라고 부르는 두 개의 작업 공간은 symlink가 공유하는 .hg 트리를 가지고 있음이 밝혀졌습니다.

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

Mercurial과는 관련이 없습니다. Mercurial은 동일한 저장소를 공유하는 두 작업 공간의 개념을 이해하지 못합니다. 그러나 다른 VCS에서 Mercurial로 오는 누군가가 이것을 원할 수도 있음을 이해합니다 (DVCS는 아니지만 Perforce는 그렇게합니다. Bazaar DVCS는 그렇게 할 수 있습니다). 이 푸시를 제외하고는 symlinked REP-ROOT / .hg가 전혀 작동하지 않는다는 것에 놀랐습니다.


에서 dirstate를 추적하지 .hg/않습니까? 리포지토리가 "작동"한다고 말하면 hg up하나에서 실행 하면 dirstate가 다른 디렉토리에서 동기화되지 않습니까? 아니면 수은이이를 지원하기 위해 특별한 작업을 수행합니까?
binki

1
Core Mercurial과 함께 제공되는 공유 확장을 사용하여 단일 저장소에서 여러 작업 디렉토리를 가질 수 있습니다.
Marmoute

4

나는 같은 문제가 있었다. 커밋하려고 할 때 다음 메시지가 나타납니다.

waiting for lock on working directory of <MyProject> held by '...'

hg debuglock 이것을 보여 주었다 :

lock:  free
wlock:  (66722s)

그래서 다음 명령을 수행하고 문제가 해결되었습니다.

hg debuglocks -W

Win7 및 TortoiseHg 사용 4.8.7.


2

잠긴 저장소가 원본 인 경우 수정 된 것으로 상상할 수 없습니다 경우 복제하도록 했다고 중간에서 변경하여 복제본을 망칠 수 없습니다. 자물쇠를 제거한 후에는 괜찮습니다.

새로운 복제 된 사본 (로컬 복제 인 경우)은 모든 종류의 기형 상태 일 수 있으므로 버리고 다시 시작해야합니다. (원격 복제라면 실패하고 이미 불완전한 복사본을 버렸으면 좋겠다.)


2

푸시하려고 할 때 Mac OS X 10.7.5 및 Mercurial 2.6.2에서이 문제가 발생했습니다. Mercurial 3.2.1로 업그레이드 한 후 "저장소 잠금 대기 중"대신 "변경 사항이 없습니다"가 표시됩니다. 어떻게 든 기본 경로가 동일한 저장소를 가리 키도록 설정되었으므로 Mercurial이 혼란스러워하는 것은 놀라운 일이 아닙니다.


1
어떻게 든 기본 경로가 동일한 저장소를 가리 키도록 설정되었음을 알았습니다 . 이. 감사합니다-저는 문제를 해결하기 위해 루프를 겪었으며 path설정은 범인이었습니다.
WoJ

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.