在克隆Mercurial存储库时,在Windows中遇到蓝屏错误。
重启后,现在我执行几乎所有的hg命令都会得到以下消息:
c:\src\>hg commit 等待锁定c:\src\McVrsServer存储库,由'\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 中断!
谷歌没有帮助。
有什么提示吗?
在克隆Mercurial存储库时,在Windows中遇到蓝屏错误。
重启后,现在我执行几乎所有的hg命令都会得到以下消息:
c:\src\>hg commit 等待锁定c:\src\McVrsServer存储库,由'\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 中断!
谷歌没有帮助。
有什么提示吗?
当出现“等待仓库锁定”时,请删除存储库文件:.hg/wlock
(或者可能在
中)。.hg/store/lock
在删除锁定文件时,必须确保没有其他东西正在访问该存储库。(如果锁定是一串零或空白,则几乎可以肯定这是正确的)。
hg recover
命令。 - James Broadhead当 等待工作目录上的锁
时,删除 .hg/wlock
文件。
server:pid
的'nix上的符号链接。非常感谢。然后我必须运行 $ hg recover
来清除我因为按下 ctrl+c
而中断的现有日志和提交消息。不确定,但您可以尝试运行 $ hg recover
而不删除锁定文件,它可能会为您完成。值得一试,我想。 - sholsinger我曾遇到过没有检测到锁文件的问题。我在这里找到了解决方案: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]
此后,中止的操作已成功执行。
此锁定已在两年前通过一台不再位于局域网上的机器上的过程设置。hg开发者应该为以下原因感到羞耻:a)没有充分记录锁定;b)没有为它们设置时间戳以在它们过期时自动删除它们。
wlock
,则使用hg debuglocks --force-wlock
。 - Brad Turek.hg/store/lock
(如所接受的答案中所述).hg/store/phaseroots
(如这个TortoiseHG bug报告)中所述hg debuglock
是一个比盲目删除.hg/store/lock
文件更安全的替代方法。我非常熟悉Mercurial的锁定代码(截至1.9.1版本)。以上建议很好,但我要补充一点:
(对于好奇的人:我还没有能够找到这个问题的原因,但怀疑是较旧版本的Mercurial访问存储库或某些版本的Windows上Python的socket.gethostname()调用存在问题。)
我也遇到了同样的问题。当我尝试提交时,收到了以下消息:
waiting for lock on working directory of <MyProject> held by '...'
hg debuglock
显示如下:
lock: free
wlock: (66722s)
我执行了以下命令,问题得到了解决:
hg debuglocks -W
我在Win 7上也遇到了同样的问题。
解决办法是删除以下文件:
至于.hg/store/lock - 没有这个文件。
hg debuglock
来找出发生了什么,并终止持有锁的进程。我并不认为这个答案能赢得胜利,但这是一个相当不寻常的情况。如果有人遇到类似问题,可以提一下。
今天我在执行hg push命令时遇到了“等待锁定存储库”的情况。
当我kill掉hang住的hg命令时,我发现没有.hg/store/lock文件。
当我在命令挂起时查找.hg/store/lock时,它是存在的。但是,当hg命令被kill掉时,lockfile就被删除了。
当我去push的目标处执行hg pull时,没有问题。
最终我意识到,在hg push的进程ID上,锁等待消息每次都在改变。原来,“hg push”在等待由自己(或可能是子进程)持有的锁。
事实证明,两个工作区(称为A和B)共享了符号链接的.hg目录:
A/.hg --symlinked-to--> B/.hg
在Mercurial中,这样做并不是一个好主意。Mercurial无法理解两个工作区共享同一个仓库的概念。然而,我理解从其他版本控制系统转到Mercurial的人可能会希望这样做(Perforce可以,尽管它不是DVCS;据报道Bazaar DVCS也可以)。我很惊讶符号链接的REP-ROOT/.hg能够正常工作,尽管它似乎除了这个push之外都能工作。
.hg/
中的dirstate吗?当你说这些存储库“工作”时,是否在一个存储库中运行hg up
会使另一个存储库的dirstate不同步,或者Mercurial做了一些特殊的支持? - binki我在尝试推送时遇到了这个问题,我的操作系统是Mac OS X 10.7.5,Mercurial版本是2.6.2。升级到Mercurial 3.2.1后,我得到了“未发现更改”,而不是“等待仓库锁定”。我发现默认路径已经设置为指向相同的仓库,所以Mercurial会感到困惑也就不足为奇了。
path
设置是罪魁祸首。 - WoJ