Mercurial sıkışmış “kilit bekleniyor”


346

Merkür havuzunu klonlarken pencerelerde mavi ekran var.

Yeniden başlattıktan sonra, hemen hemen tüm hg komutları için bu mesajı alıyorum:

c: \ src \> hg taahhüt
depoda kilit bekleniyor c: \ src \ McVrsServer '\ x00 \ x00 \ x00 \ x00 \ x00 \
x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00'
kesintiye!

Google yardım etmez.

Herhangi bir ipucu?


3
Vay be, ben de çalışırken bir mavi ekran vardı ve aynı hatayı aldım. Sadece ben değilim sevindim!
CBarr

3
Hata mesajının daha iyi geri bildirimini bz.selenic.com/show_bug.cgi?id=4752
Karl Richter

Yanıtlar:


489

"Havuzda kilit beklenirken", depo dosyasını silin: .hg/wlock(veya içinde olabilir .hg/store/lock)

Kilit dosyasını silerken, depoya başka hiçbir şeyin erişmediğinden emin olmalısınız. (Kilit sıfır veya boş bir dizeyse, bu neredeyse kesinlikle doğrudur).


103
Benim sorunum klonlama veya BSOD ile ilgisi yoktu ama benim için, kilidi temizlemek için .hg / wlock dosyasını sildim.
frank hadder

32
hg recoverkırık bir kilitleme durumundan sonra çalıştırılmalıdır.
James Broadhead

9
Çok teşekkürler - .hg / wlock kaldırdıktan sonra sorunun ne olduğu hakkında hiçbir fikrim yoktu
Andrew Buss

34
Benim durumumda (Mercurial 2.7.2 ile TortoiseHg V2.9.2), dosya adı "kilit" yerine "kilitli" idi; ve ".hg / store" yerine ".hg" dizinine yerleştirildi.
Fernando

7
@Marmoute - depo her değişiklik yapıldığında kilitlenir. Bir şey bu işlemin başarısız olmasına neden oluyorsa - yani Mercurial'taki bir hata, bir makine kapanıyor, vb. - Kilit dosyaları temizlenmez. Burada kilit dosyalarını elle silmek için önerilerin, havuzun bir şekilde "kirli" durumda kaldığı durumları ele almak olduğuna inanıyorum. Buna "mercurial korumayı körü körüne çıkarmak" demek, bu durumlarda olanların adil ve doğru bir karakterizasyonu değildir.
JoGusto

345

Ne zaman waiting for lock on working directory, silin .hg/wlock.


6
Benim için durum buydu. Akım 'nix üzerinde bir sembolikti server:pid. Çok teşekkürler. Sonra $ hg recoveryayınladığım dergiyi (& taahhüt mesajını) silmek için kaçmak zorunda kaldım ctrl+c. Emin değilsiniz, ancak $ hg recoverkilit dosyasını silmeden çalıştırabilirsiniz ve bunu sizin için yapar. Sanırım bir atışa değer.
sholsinger

2
@Sholsinger için, ilk önce kilidi kaldırmazsanız çalışan hg kurtarma işlevinin çalışmadığını söyleyen bir not. Denedim.
Dan

1
Depo bir sebepten dolayı kilitlenir, başka bir süreç repo üzerinde çalışıyor. Mercurial korumayı körü körüne kaldırmak yerine bu işlemi bulmalı ve sonlandırmalısınız. Sadece dosyayı düşürmek depo bozulmasına yol açabilir.
Mart

@Marmoute Benim durumumda repo üzerinde başka bir işlem çalışmadığı için kilidi kaldırmak zorunda kaldım. Ama katılıyorum, önce başka bir süreç aramaya değer
Mi-La

Bu mesajı, birkaç gün boyunca sorunsuz bir şekilde çekip ittikten sonra çekmeye çalışırken aniden aldım. Dosyayı sildikten sonra sorun çözüldü. Dosya 0 KB, yani boş olduğunu tahmin ediyorum. Sadece dosyayı silmek iyi mi? Sanırım koruma açısından faydalı.
Ben Carp

47

Ben algılanabilir kilit dosyaları ile bu sorunu vardı. Çözümü burada buldum: http://schooner.uwaterloo.ca/twiki/bin/view/MAG/HgLockError

İşte Tortoise Hg Workbench konsolundan bir transkript

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

Bundan sonra durdurulmuş çekme başarılı bir şekilde koştu.

Kilit, artık LAN'da olmayan bir makinedeki bir işlemle 2 yıldan fazla bir süre önce ayarlanmıştı. Hg geliştiricileri için a) kilitleri yeterince belgelememek; b) Bayat olduklarında otomatik olarak çıkarmak için zaman damgası atmamak.


23
Protip: Eğer wlockkilitliyse, kullanhg debuglocks --force-wlock
Brad Turek

5
7+ yıldır kaplumbağa hg kullandım. Sorunu yaklaşık 3 ay öncesine kadar hiç görmedim. Son 3 ayda 3 kez gördüm. Bazı güncellemeler sorunu daha da artırmış olmalıdır.
d ei

20

İş arkadaşım bugün bir BSoD'dan sonra zorlamaya çalışırken tam olarak bu problemi yaşadı. Yapması gerekenler:

Sonra repo tekrar çalıştı.

DÜZENLEME: @ Marmoute'un yorumuna göre - kilitle ilgili sorunlarla uğraşırken, kullanmak dosyayı hg debuglockkörü körüne silmenin daha güvenli bir alternatifidir .hg/store/lock.


2
1) Faz kökleri dosyasına dokunmanız için hiçbir neden yoktur, kilitleme ile kesinlikle ilgisizdir. 2) kilidin kaldırılması körleme kötü bir fikirdir, muhtemelen başka bir işlem kullanmaktadır. ne olduğunu anlamak ve kilidi tutan işlemi sonlandırmak için hg hata ayıklama kullanın
Marmoute

3
1) Sorunu kaldırmanın sorunu çözdüğünü düşünürsek, katılmıyorum. 2) O zaman hg hata ayıklama hakkında bilmiyordum (üzerinde herhangi bir belge de bulamıyorum) ve sistem yeniden başlatıldığından yeni geldiğinden, açık bir şekilde depoyu kilitleyen hiçbir şey yoktu - bu nedenle kilit dosyasını silmek uygun oldu.
Ian Kemp

12

Mercurial'ın kilitleme kodunu çok iyi biliyorum (1.9.1 itibariyle). Yukarıdaki tavsiye iyidir, ancak şunu ekleyeceğim:

  1. Bunu vahşi, ancak nadiren ve sadece Windows makinelerinde gördüm.
  2. Kilit dosyalarını silmek en kolay çözümdür, ancak başka hiçbir şeyin depoya erişmediğinden emin olmanız gerekir. (Eğer kilit sıfırlardan oluşuyorsa, bu neredeyse kesinlikle doğrudur).

(Merak etmek için: Bu sorunun nedenini henüz yakalayamadım, ancak Mercurial'ın depoya erişmesinin eski bir sürümü veya Python'un socket.gethostname () çağrısında Windows'un belirli sürümlerinde bir sorun olduğundan şüpheleniyorum.)


2
FWIW bana sadece Ubuntu'da oldu. Depoyu birkaç hafta içinde ilk kez kullanıyordum, bu yüzden o durumda ne bırakabileceğini hatırlamıyorum.
Cosmologicon

7

Win 7'de aynı sorunu vardı. Çözüm aşağıdaki dosyaları kaldırmak oldu:

  1. .hg / mağaza / phaseroots
  2. .hg / wlock

.Hg / store / lock - böyle bir dosya yoktu.


Stackoverflow'a hoş geldiniz.
Yayına

5
1) Faz kökleri dosyasına dokunmanız için hiçbir neden yoktur, kilitleme ile kesinlikle ilgisizdir. 2) kilidin kaldırılması körleme kötü bir fikirdir, muhtemelen başka bir işlem kullanmaktadır. kullanmak hg debuglockbu oluyor anlamaya ve kilit tutan sürecini sonlandırmak için.
Mart

6

Bunun kazanan bir cevap olmasını beklemiyorum, ama bu oldukça sıra dışı bir durum. Benden başka birinin içeri girmesi durumunda bahsetmek.

Bugün bir hg push komutunda "depoda kilit beklemeyi" aldım.

Asılı hg komutunu öldürdüğümde hiçbir .hg / store / lock göremedim

Komut asılıyken .hg / store / lock öğesini aradığımda mevcuttu. Ancak hg komutu öldürüldüğünde kilit dosyası silindi.

Ben itme hedefe gitti ve hg çekme yürüttüğümde, sorun değil.

Sonunda hg push üzerindeki işlem kimliğinin kilit bekleme mesajı her seferinde değiştiğini fark ettim. Bu "hg itme" kendi başına tutulan bir kilit bekliyor asılı çıkıyor (ya da muhtemelen bir alt süreç, daha fazla araştırma yapmadım).

İki çalışma alanının, A ve B diyelim, symlink tarafından paylaşılan .hg ağaçları olduğu ortaya çıktı:

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

Bu Mercurial ile iyi bir şey DEĞİLDİR. Mercurial, aynı depoyu paylaşan iki çalışma alanı kavramını anlamıyor. Bununla birlikte, başka bir VCS'den Mercurial'a gelen birinin bunu nasıl isteyebileceğini anlıyorum (Performans bir DVCS olmasa da yapar; Çarşı DVCS'nin bunu yapabileceği bildiriliyor). Bu itme dışında görünmesine rağmen, sembolik bir REP-ROOT / .hg'nin hiç çalışmamasına şaşırdım.


Hg track dirstate içeri girmiyor .hg/mu? Depoların “işe yaradığını” hg upsöylediğinizde, birinde koşmak dirstate'i diğerinde senkronize etmiyor ya da cıva bunu desteklemek için özel bir şey yapıyor mu?
binki

1
Tek bir depodan birden çok çalışma dizinine sahip olmak için paylaşım uzantısını (Core Mercurial ile birlikte gönderilir) kullanabilirsiniz.
Mart

4

Ben de aynı problemi yaşadım. Taahhüt etmeye çalıştığımda aşağıdaki mesajı aldım:

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

hg debuglock bunu gösterdi:

lock:  free
wlock:  (66722s)

Bu yüzden aşağıdaki komutu yaptım ve bu benim için sorunu düzeltti:

hg debuglocks -W

Win7 ve TortoiseHg Kullanımı 4.8.7.


2

Kilitli repo orijinalse, değiştirdiğini hayal edemiyorum onu klonlamak için , bu yüzden sadece ortada değiştirmenizi ve klonu karıştırmanızı engelliyordu. Kilidi çıkardıktan sonra iyi olmalıdır.

Yeni klonlanmış kopya (yerel bir klon ise) herhangi bir şekilde hatalı biçimlendirilmiş durumda olabilir, bu yüzden onu atmanız ve yeniden başlatmanız gerekir. (Uzak bir klon olsaydı, başarısız olacağını ve eksik kopyayı attığını umarım.)


2

Zorlamaya çalışırken Mac OS X 10.7.5 ve Mercurial 2.6.2'de bu sorunla karşılaştım. Mercurial 3.2.1 sürümüne geçtikten sonra "depoda kilit beklemek" yerine "değişiklik bulunamadı" ifadesini aldım. Bir şekilde varsayılan yolun aynı veri havuzunu gösterecek şekilde ayarlandığını öğrendim, bu yüzden Mercurial'ın kafası karışması çok şaşırtıcı değil.


1
Bir şekilde varsayılan yolun aynı veri havuzunu gösterecek şekilde ayarlandığını öğrendim . Bu. Teşekkür ederim, sen - sorundan kurtulmak için döngülerden geçtim ve pathayar suçlu idi.
WoJ

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.