克隆文件系统时的Mercurial锁定

时间:2016-11-22 17:02:04

标签: windows mercurial

在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)复制存储库可能导致复制更改日志指的是不在副本中的清单条目。

那么,克隆文件系统时会出现什么样的机制?

1 个答案:

答案 0 :(得分:1)

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

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

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

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