水星卡住“等待锁定”

你离开我真会死。 提交于 2020-03-04 16:51:29

克隆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!

Google没有帮助。

有小费吗?


#1楼

如果仅在映射的驱动器上发生,则可能是错误https://bitbucket.org/tortoisehg/thg/issue/889/cant-commit-file-over-network-share 。 使用UNC路径而不是驱动器号似乎可以避免此问题。


#2楼

当“等待锁定存储库”时,删除存储库文件: .hg/wlock (或者可以在.hg/store/lock

删除锁定文件时,必须确保没有其他东西正在访问存储库。 (如果锁是零或空白的字符串,则几乎可以肯定是这样)。


#3楼

如果锁定的存储库是原始存储库,那么我无法想象它会对其进行修改以克隆它,因此,这只是防止您在中间对其进行更改并弄乱了克隆库。 卸下锁后应该没问题。

但是,新克隆的副本(如果是本地克隆)可能处于任何形式的畸形状态,因此您应该将其丢弃并重新开始。 (如果它是一个远程克隆,我希望它会失败,并且已经丢弃了不完整的副本。)


#4楼

今天,在尝试推送的BSoD之后,同事遇到了这个确切的问题。 他不得不:

然后他的回购再次起作用。

编辑:根据@Marmoute的评论-处理与锁相关的问题时,使用hg debuglock是一种安全的选择,而不是一味删除.hg/store/lock文件。


#5楼

我不希望这是一个成功的答案,但这是一个非常不寻常的情况。 提到万一我以外的人遇到了它。

今天,我在hg push命令上获得了“等待存储库锁定”。

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

当命令挂起时我寻找.hg / store / lock时,它存在。 但是当hg命令被杀死时,锁定文件被删除。

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

最终,我意识到hg push上的进程ID是每次都在更改的锁等待消息。 事实证明,“ hg推送”正在挂起,等待自身持有的锁(或者可能是子进程,我没有做进一步调查)。

事实证明,两个工作区(分别称为A和B)具有由symlink共享的.hg树:

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

这与Mercurial无关。 Mercurial无法理解共享相同存储库的两个工作区的概念。 但是,我确实知道,有人从另一个VCS来到Mercurial可能会想要这样做(Perforce确实做到了,尽管不是DVCS;据报道,Bazaar DVCS可以这样做)。 我感到惊讶的是,一个符号链接的REP-ROOT / .hg完全可以工作,尽管除了此推动之外似乎还行。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!