【问题标题】:Mercurial lock when cloning over a filesystem克隆文件系统时的 Mercurial 锁
【发布时间】:2016-11-22 17:02:03
【问题描述】:

在 Windows 环境中通过 http 克隆 Mercurial 存储库时,我得到以下输出:

hg clone http:/myserver/hg/repo hgcopy
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added xxx changesets with xxx changes to 92985 files
  updating to branch default
  92985 files updated, 0 files merged, 0 files removed, 0 files unresolved

通过文件系统克隆,即通过共享网络驱动器,会产生完全不同的输出:

c:\Hg>hg clone \\server\Hg\Repo c:\Hg\Repo
   copying [   <=>                                   ] 23712
   updating to branch default
   92985 files updated, 0 files merged, 0 files removed, 0 files unresolved

最后一个操作快了 3 倍,但会在远程存储库中创建一个锁定文件,从而无法从另一个系统启动第二个克隆。 Mercurial docs about Locking Design 没有透露太多关于它的信息:

如果阅读器乱序读取文件,可能会出现问题。例如,在拉取或提交期间使用其他工具(例如 rsync)复制存储库可能会导致复制更新日志,该更新日志引用不在副本中的清单条目。

那么,在文件系统上进行克隆时会发生什么样的机制?

【问题讨论】:

    标签: windows mercurial


    【解决方案1】:

    那些不是堆栈跟踪,它们只是普通的输出。

    Mercurial 在通过复制或硬链接精确地使用“快速复制”克隆时锁定源存储库因为这不使用较慢的“拉协议”。你可以运行:

    hg clone --pull \\server\Hg\Repo c:\Hg\Repo
    

    强制 Mercurial 使用 pull 协议:请参阅 hg help --verbose clone 了解详细信息。这将比直接复制慢,但可能不如通过httphttps 克隆慢(因为HTTP 需要通过您的网络服务器传递所有数据)。

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2012-08-31
      • 2011-06-29
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多