水银卡住了“等待locking”

在克隆一个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'
中断!

谷歌没有帮助。

有小费吗?

当“等待存储库locking”时,删除存储库文件: .hg/store/lock

在删除locking文件时,您必须确保没有其他人访问存储库。 (如果锁是一串零,这几乎肯定是真的)。

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

同事今天有一个确切的问题,经过BSoD试图推动。 他不得不:

  • 删除文件.hg/store/lock (按照接受的答案 )
  • 删除文件.hg/store/phaseroots (按照这个TortoiseHG错误报告 )

然后他的回购再次工作。

编辑:根据@ Marmoute的评论 – 当处理与锁相关的问题时,使用hg debuglock是盲目删除.hg/store/lock文件的更安全替代方法。

我对Mercurial的锁码非常熟悉(截至1.9.1)。 上述build议是好的,但我补充说:

  1. 我已经看到了这一点,但很less,只有在Windows机器上。
  2. 删除locking文件是最简单的修复方法,但是您必须确保没有其他人访问存储库。 (如果锁是一串零,这几乎肯定是真的)。

(为了好奇:我还没有能够赶上这个问题的原因,但是怀疑它是旧版本的Mercurial访问版本库,或者是某些Windows版本的Python的socket.gethostname()调用中的一个问题。

我有这个问题没有检测到locking文件。 我在这里find了解决scheme: 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] 

在这之后,失败的拉跑成功了。

这个锁已经在2年多的时间里通过一个不在局域网上的机器进行了设置。 对于hg开发人员的羞辱a)没有充分地logginglocking; b)当它们变旧时,不要将它们打上时间戳来自动清除。

我在Win 7上遇到了同样的问题。解决方法是删除以下文件:

  1. .hg /存储/ phaseroots
  2. .hg / wlock

至于.hg / store / lock – 没有这样的文件。

如果locking的回购是原始的,我无法想象它正在修改它克隆它,所以它只是防止你在中间改变它,搞砸克隆。 解锁后应该没问题。

然而,新克隆的副本(如果是本地克隆的话)可能处于任何forms的畸形状态,所以你应该把它抛出并重新开始。 (如果这是一个遥远的克隆,我希望它失败了,并且已经把不完整的副本扔出去了。)

我不认为这是一个胜利的答案,但这是一个相当不寻常的情况。 提到如果有人以外的人遇到它。

今天我得到了一个hg push命令上的“等待锁库”。

当我杀了挂hg命令时,我看不到.hg / store / lock

当命令挂起时,当我查找.hg / store / lock时,它就存在。 但是,当hg命令被终止时,lockfile被删除。

当我去推的目标,并执行hg拉,没问题。

最终我意识到,hg push上的进程ID是锁等待消息每次都在改变。 事实certificate,“hg push”正在等待自己locking(或者可能是一个subprocess,我没有进一步调查)。

事实certificate,这两个工作空间,我们称之为A和B,是由symlink共享的.hg树:

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

这对Mercurial来说不是一件好事。 Mercurial不理解共享同一个存储库的两个工作区的概念。 不过,我明白,从另一个VCS来到Mercurial的人可能会想要这样做(Perforce虽然不是DVCS,但是据报道Bazaar DVCS可以这么做)。 我感到惊讶的是,一个符号链接的REP-ROOT / .hg可以工作,但似乎除了这个推送。

如果只发生在映射驱动器上,可能是bug https://bitbucket.org/tortoisehg/thg/issue/889/cant-commit-file-over-network-share 。 使用UNCpath而不是盘符似乎避开了这个问题。

在尝试推送时,我在Mac OS X 10.7.5和Mercurial 2.6.2上遇到了这个问题。 在升级到Mercurial 3.2.1之后,我得到了“没有发现变化”,而不是“等待locking存储库”。 我发现默认path已经设置为指向同一个存储库,所以Mercurial会感到困惑并不奇怪。