use*_*784 9 mercurial subrepos
我对mercurial很新,我在这个主题上已经阅读了很多,但我一直无法找到明确的答案.
mercurial指南说:"为了提高效率,只要源和目标位于同一文件系统上,就会使用硬链接进行克隆(请注意,这仅适用于存储库数据,而不适用于工作目录)."
该库wiki页面说:"所有的文件和与存储库中的根目录.hg共存目录被认为生活在工作目录".
现在,要在主回购中"链接"subrepo我做:
hg init main
cd main
echo subrepo = ../subrepo > .hgsub
hg clone ../subrepo subrepo # (1)
hg add
hg ci -m "initial rev of the main repo"
Run Code Online (Sandbox Code Playgroud)
难道上述定义意味着我真正创建一个副本的subrepo时候进行(1)?? 或者我只创建一个符号链接../subrepo?根据输出ls,它是一个实际的副本.但这对我来说听起来很奇怪......如果有人能对这个问题有所了解,我会很感激.
首先,Mercurial的那部分,我不是专家,但这就是我所理解的.
不,您没有创建指向整个目录的链接.相反,文件内部硬链接.
这意味着磁盘上的空间被保留以保持您的目录结构分离,但文件都是相同的,因为它们只是克隆,所以它们被构造为返回原始的链接.
当您开始通过addor commit(ci)命令操作存储库时,Mercurial会破坏硬链接,并根据需要为每个链接构建单独的文件.
现在,这纯粹是技术性的,你不需要知道或关心这一点.如果它更容易,只需将克隆视为原始存储库的完整副本,单独的文件和所有这些.硬链接部分只是为了相同的东西节省磁盘空间.
由于典型的项目有很多文件,而典型的变更集只会更改一些文件,而克隆的典型原因是你要做一组固定的更改,因为存储库目录中的许多文件都有硬链接.在存储库的生命周期内,它们与原始文件完全相同.
对于那些没有的,所有这些都由Mercurial默默处理.