“Mercurial Stick”;“等待锁定”;

“Mercurial Stick”;“等待锁定”;,mercurial,Mercurial,克隆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! c:\src\>hg提交 正在等待由“\x0

克隆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! c:\src\>hg提交 正在等待由“\x00\x00\x00\x00\x00\x00\x00\x00\x00”持有的存储库c:\src\McVrsServer上的锁定\ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 打断! 谷歌帮不了什么忙

任何提示?

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


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

< P>如果锁定的回购是原来的,我无法想象它正在修改它来克隆它,所以它只会阻止你在中间改变它,扰乱克隆。拆下锁后应该没问题


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

等待锁定工作目录时,删除
.hg/wlock

我非常熟悉Mercurial的锁定代码(从1.9.1开始)。上述建议很好,但我要补充一点:

  • 我在野外见过这种情况,但很少,而且只在Windows机器上见过
  • 删除锁定文件是最简单的修复方法,但您必须确保没有其他东西正在访问存储库。(如果锁是一串零,这几乎肯定是正确的)

  • (出于好奇:我还没有找到这个问题的原因,但怀疑可能是Mercurial的旧版本访问存储库,或者是Python的socket.gethostname()调用在某些版本的Windows上出现了问题。)

    如果它只发生在映射驱动器上,则可能是错误。使用UNC路径而不是驱动器号似乎可以避免这个问题。

    今天,一位同事在尝试推送时遇到了BSoD问题。他必须:

    • 删除文件
      .hg/store/lock
      (根据)
    • 删除文件
      .hg/store/phaseroots
      (根据)
    然后他的回购协议又起了作用


    编辑:根据@Marmoute的评论-在处理锁相关问题时,使用
    hg debuglock
    比盲目删除
    .hg/store/lock
    文件更安全。

    我不认为这是一个成功的答案,但这是一个相当不寻常的情况。 以防我以外的人碰到它

    今天,我在一个hgpush命令中得到了“等待锁定存储库”

    当我关闭hung-hg命令时,我看不到.hg/store/lock

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

    当我到达推的目标并执行hg pull时,没有问题

    最终我意识到hg push上的进程ID是lock waiting消息,每次都在更改。事实证明,“hg push”挂起等待自己持有的锁(或者可能是子流程,我没有进一步研究)

    事实证明,这两个工作区(我们称之为A和B)有symlink共享的.hg树:

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

    这对Mercurial来说不是一件好事。Mercurial不理解两个工作区共享同一存储库的概念。然而,我确实理解,从另一家风投公司来到Mercurial的人可能会希望这样(Perforce这样做,尽管不是DVCS;据说Bazaar DVCS可以这样做)。我感到惊讶的是,一个符号链接的REP-ROOT/.hg居然可以工作,尽管它似乎除了这个推送之外。我在Mac OS X 10.7.5和Mercurial 2.6.2上尝试推送时遇到了这个问题。升级到Mercurial 3.2.1后,我得到的是“未发现任何更改”,而不是“等待存储库锁定”。我发现默认路径被设置为指向同一个存储库,所以Mercurial会感到困惑也就不足为奇了。

    我在Win7上也遇到了同样的问题。 解决方案是删除以下文件:

  • .hg/存储/相区
  • .hg/wlock

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

    我遇到了这个问题,因为没有可检测的锁文件。我在这里找到了解决方案:

    这是来自Tortoise Hg工作台控制台的一份转录本

    % 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) 没有在它们过时时自动删除它们的时间戳。

    我也有同样的问题。我尝试提交时收到以下消息:

    waiting for lock on working directory of <MyProject> held by '...'
    
    因此,我执行了以下命令,解决了我的问题:

    hg debuglocks -W
    

    使用Win7和OrtoiseHG 4.8.7。

    我的问题与克隆或BSOD无关,但对我来说,我删除了.hg/wlock文件以清除锁。
    hg recover
    应该在锁断后运行。非常感谢-删除.hg/wlock后,我不知道我的问题是什么(带有Mercurial 2.7.2的OrtoiseHG V2.9.2),文件名为“wlock”而不是“lock”;它被放在“.hg”目录中,而不是“.hg/store”。@Marmoute——每当要进行更改时,存储库就会被锁定。如果某件事情导致该进程失败——例如,Mercurial中的一个bug、一台机器出现故障等等——锁文件将保留,而不是清理。我相信这里手动删除锁文件的建议是为了解决存储库不知何故处于“不干净”状态的情况。称之为“盲目消除汞保护”并不是对这些案件的公正和准确描述,我就是这样认为的。它是nix上指向当前
    服务器的符号链接:pid
    。谢谢
    hg debuglocks -W