在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
。这将比直接拷贝慢,尽管可能不如通过http
或https
克隆慢(因为HTTP需要通过Web服务器传递所有数据)。