在文件系统上克隆时锁定锁定



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

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 \serverHgRepo c:HgRepo
   copying [   <=>                                   ] 23712
   updating to branch default
   92985 files updated, 0 files merged, 0 files removed, 0 files unresolved

最后一个操作的速度快3倍,但在遥控器中创建一个锁定文件,因此无法从另一个系统启动第二个克隆。有关锁定设计的Mercurial文档没有透露太多有关它的信息:

如果读者读取文件不顺序,可能会出现可能的问题。例如,在拉或提交过程中使用其他工具(例如RSYNC)复制存储库可能会导致复制changelog是指不在副本中的明显条目。

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

这些不是 stack traces ,它们只是普通的输出。

使用"快速复制"克隆通过副本或硬链接的克隆时,将锁定源存储库,因为这不使用较慢的"拉协议"。您可以运行:

hg clone --pull \serverHgRepo c:HgRepo

迫使mercurial无论如何使用拉动协议:有关详细信息,请参见hg help --verbose clone。这将比直接拷贝慢,尽管可能不如通过httphttps克隆慢(因为HTTP需要通过Web服务器传递所有数据)。

最新更新