gpt4 book ai didi

mercurial - subrepo、hg 克隆和符号链接(symbolic link)

转载 作者:行者123 更新时间:2023-12-04 04:08:06 27 4
gpt4 key购买 nike

我对 mercurial 很陌生,我已经阅读了很多关于这个主题的内容,但我一直无法找到明确的答案。

The mercurial guide说:“为了提高效率,只要源和目标位于同一文件系统上,就使用硬链接(hard link)进行克隆(请注意,这仅适用于存储库数据,不适用于工作目录)。”

Repository wiki page说:“与存储库根目录中的 .hg 目录共存的所有文件和目录都被认为存在于工作目录中”。

现在,要在主仓库中“链接”一个子仓库,我会这样做:

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"

上面的定义是否意味着我实际上是在创建一个 复制 subrepo当我执行(1)时?还是我只是创建一个指向 ../subrepo 的符号链接(symbolic link)? ?根据 ls 的输出,这是一个实际的副本。但这对我来说听起来很奇怪......如果有人可以对这个主题有所了解,我将不胜感激。

最佳答案

首先,Mercurial的那部分,我不是专家,但这是我所理解的。

不,您没有创建指向整个目录的链接。相反,文件在其中被硬链接(hard link)。

这意味着磁盘上的空间被保留以保持您的目录结构分开,但文件都是相同的,因为它们只是被克隆的,所以它们被构造为返回原始文件的链接。

当您开始操作存储库时,通过您的 addcommit ( ci ) 命令,然后硬链接(hard link)被 Mercurial 破坏,并根据需要为每个文件构建单独的文件。

现在,这纯粹是一个技术性的东西,你不需要知道或关心这个。如果它更容易,只需将克隆视为原始存储库的完整副本,单独的文件等等。硬链接(hard link)部分只是为相同的东西节省磁盘空间。

由于一个典型的项目有很多文件,而一个典型的变更集只更改了几个文件,而克隆的一个典型原因是您要进行一组固定的更改,因此硬链接(hard link)是有意义的,因为存储库目录中的许多文件在存储库的生命周期内,将与它们的原始版本 100% 相同。

对于那些不是,所有这一切都由 Mercurial 默默地为您处理。

关于mercurial - subrepo、hg 克隆和符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com