Mercurial卡住了“等待鎖定”


Answers

waiting for lock on working directory ,請刪除.hg/wlock

Question

在克隆一個mercurial倉庫的同時在windows中獲得了藍屏。

重啟後,我現在得到這個消息幾乎所有的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!

谷歌沒有幫助。

有小費嗎?




今天,在嘗試推送BSoD後,同事遇到了這個問題。 他不得不:

  • 刪除文件.hg/store/lock (按照接受的答案 )
  • 刪除文件.hg/store/phaseroots (按照此TortoiseHG錯誤報告

然後他的回購再次奏效。

編輯:根據@ Marmoute的評論 - 當處理與鎖相關的問題時,使用hg debuglock是盲目刪除.hg/store/lock文件的更安全替代方案。




我不認為這是一個成功的答案,但這是一個相當不尋常的情況。 提到以防其他人遇到它。

今天,我通過hg push命令獲得了“等待鎖存庫”。

當我殺死掛hg命令時,我看不到.hg / store / lock

當我在命令掛起時查找.hg / store / lock時,它已存在。 但是,當hg命令被終止時,lockfile被刪除。

當我去推的目標,並執行hg拉,沒問題。

最終我意識到hg push上的進程ID是鎖等待消息每次都在改變。 事實證明,“hg push”正在等待自己持有的鎖(或可能是一個子進程,我沒有進一步調查)。

事實證明,這兩個工作空間,我們稱它們為A和B,它們具有通過符號鏈接共享的.hg樹:

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

這對Mercurial來說不是一件好事。 Mercurial不理解共享相同存儲庫的兩個工作區的概念。 然而,我確實明白,從另一個VCS來到Mercurial的人可能會想要這樣做(Perforce的確如此,儘管不是DVCS;據報導,Bazaar DVCS可以這樣做)。 令我驚訝的是,符號鏈接的REP-ROOT / .hg完全可以工作,但似乎除了這種推送。




在嘗試推送時,我在Mac OS X 10.7.5和Mercurial 2.6.2上遇到此問題。 升級到Mercurial 3.2.1之後,我得到了“沒有發現變化”,而不是“等待鎖定存儲庫”。 我發現默認路徑已經設置為指向同一個存儲庫,所以Mercurial會感到困惑並不奇怪。




如果鎖定的回購是原始的,我無法想像它會修改它來克隆它,所以它只會阻止你在中間改變它並搞亂克隆。 解除鎖定後應該沒問題。

但是新的克隆拷貝(如果它是本地克隆的話)可能處於任何形式的畸形狀態,所以你應該拋棄它並開始它。 (如果這是一個遙遠的克隆,我希望它失敗了,並且已經丟棄了不完整的副本。)