首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汞储存库的数据损坏

汞储存库的数据损坏
EN

Stack Overflow用户
提问于 2013-07-01 08:20:10
回答 2查看 1.1K关注 0票数 1

我在c:\Dropbox\code有一个mercurial存储库。我已经在本地创建了这个回购的克隆,使用:

代码语言:javascript
复制
hg clone -U c:\Dropbox\code c:\GoogleDrive\codeBackup

这种裸回购只起备份的作用。我经常将更改推送到codeBackup。此外,这两个目录都备份在云中(Dropbox和Google )。

如果我在code中的回购被破坏,那么codeBackup回购会不会自动损坏,因为克隆操作使用了到原始回购的硬链接?这样我的双云备份策略就没用了?

P.S.:我知道后退选项是使用云服务来恢复以前已知的良好状态。

更新:在深入挖掘之后,我将添加这些以供参考

  • 浅谈汞的回购腐败

问题是,如果完成了'hg克隆‘(没有--拉选项),那么如果文件系统提供了硬链接功能(NTFS ),那么目标和源回购在.hg/ 1中共享文件。 如果对其中一个克隆执行了提交或推送,Mercurial就会破坏.hg内部的这种硬链接。这样做的前提是,如果mercurial问“这个文件上有多少个硬链接?”,Windows使用的应该是正确的答案。 我们发现,如果hg进程在一台Windows计算机上运行,并且存储库文件位于另一台Windows计算机上的网络共享上,则这个答案几乎总是错误的(总是报告1,即使实际上是>1)。

  • 为了避免硬链接(使用-拉): hg clone -U --pull c:\Dropbox\code c:\GoogleDrive\codeBackup
  • 若要检查硬链接: fsutil hardlink list :显示<file>的所有硬链接 find . -links +1:显示所有硬链接>1的文件 ls -l:显示每个文件旁边的硬链接数
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-01 09:44:16

code存储库可能变得损坏的唯一方法(假设最初将它克隆到codeBackup时它没有损坏)是当您向它写东西时,无论是提交、重写历史等等。每当有东西被写入硬链接文件时,Mercurial首先会破坏硬链接,创建文件的独立副本,然后只修改新创建的副本。

因此,要回答您的问题:在正常使用场景中,存储库损坏不会传播到您的codeBackup存储库。

票数 1
EN

Stack Overflow用户

发布于 2013-07-01 22:37:37

这里最大的问题,关于存储库的损坏,是您正在使用Dropbox和Google来跨计算机同步存储库。

,别这样!

这肯定会导致存储库损坏,除非您能够保证:

  1. 你的机器永远不会失去网络连接。
  2. 每次在多台计算机上都不会出现不同步的新更改(包括出现网络问题的时间)。
  3. Dropbox将始终运行(永不失去互联网连接的变体)
  4. 你不只是在时机问题上运气不好

要验证Dropbox是否容易导致存储库损坏,请执行以下操作:

  1. 导航到Dropbox或Google文件夹中的文件夹,并在这里创建一个汞存储库。在一台机器上做这件事,我们把它叫做A。
  2. 向它添加3个文本文件,其中包含一些内容(不是空的),并提交这3个文本文件。
  3. 等待Dropbox/Google将所有文件同步到您的第二台计算机上,让我们调用这台机器B
  4. 或者在其中一台机器上断开互联网,或者停止Dropbox/Google (不管是哪一台)
  5. 在机器A上,通过添加或修改其中的内容来更改文件1和2。在机器B上,更改文件2和3,确保在某些内容中添加/修改与您在机器A上所做的操作不同的内容。
  6. 重新连接到互联网或重新启动Dropbox/Google,这取决于您在步骤4中所做的工作
  7. 等待同步完成(Dropbox将在其托盘图标中显示绿色复选标记,不确定Google将显示什么)
  8. 在机器A和B上的存储库中运行hg verify

请注意,它们现在都已损坏:

代码语言:javascript
复制
D:\Dropbox\Temp\repotest>hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
 3.txt@?: rev 1 points to unexpected changeset 1
 (expected 0)
 3.txt@?: 89ab3388d4d1 not in manifests
3 files, 2 changesets, 6 total revisions
1 warnings encountered!
2 integrity errors encountered!

相反,可以获得一个免费的比特桶窑炉帐户,并使用它在多台计算机之间进行同步。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17400052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档