我在c:\Dropbox\code
. 我已经使用以下方法在本地创建了这个 repo 的克隆:
hg clone -U c:\Dropbox\code c:\GoogleDrive\codeBackup
这个裸仓库仅用于备份目的。我定期将更改推送到 codeBackup。此外,两个目录都备份在云中(分别为 Dropbox 和 Google Drive)。
如果我的仓库损坏了,由于克隆操作使用了指向原始仓库的硬链接,仓库code
会codeBackup
自动损坏吗?这样我的双云备份策略就没有用了吗?
PS:我知道后备选项是使用云服务来恢复以前已知的良好状态。
更新:挖掘后,我将添加这些以供参考
问题是,如果完成了“hg clone”(没有 --pull 选项),那么目标和源 repo 使用硬链接1共享 .hg/store 内的文件,如果文件系统提供硬链接功能(NTFS 提供) .
如果对其中一个克隆进行提交或推送,Mercurial 旨在破坏 .hg 中的此类硬链接。这样做的先决条件是,如果 mercurial 询问“此文件上有多少硬链接?”,则使用的 Windows API mercurial 应该给出正确的答案。
我们发现这个答案几乎总是错误的(总是报告 1,即使它实际上是 >1)如果 hg 进程在一台 Windows 计算机上运行并且存储库文件在另一台 Windows 计算机上的网络共享上。
为避免硬链接(使用 --pull):
hg clone -U --pull c:\Dropbox\code c:\GoogleDrive\codeBackup
检查硬链接:
fsutil hardlink list <file>
: 显示所有硬链接<file>
find . -links +1
: 显示所有硬链接 > 1 的文件ls -l
:显示每个文件旁边的硬链接计数