use*_*ser 1 backup mercurial hardlink dropbox google-drive-api
我有一个mercurial存储库c:\Dropbox\code.我使用以下方法在本地创建了此repo的克隆:
hg clone -U c:\Dropbox\code c:\GoogleDrive\codeBackup
Run Code Online (Sandbox Code Playgroud)
这个裸仓库仅用于备份.我经常将更改推送到codeBackup.此外,这两个目录都在云中备份(分别是Dropbox和Google Drive).
如果我的repo code变得腐败,codeBackuprepo会自动损坏,因为克隆操作使用硬链接到原始repo?因此,我的双云备份策略将毫无用处?
PS:我知道回退选项是使用云服务来恢复以前已知的良好状态.
更新:在挖掘之后,我将添加这些作为参考
问题是,如果'hg clone'完成(没有--pull选项),那么目标和源repo通过使用硬链接1共享.hg/store内的文件,如果文件系统提供了硬链接功能(NTFS) .
Mercurial旨在打破.hg中的这些硬链接,如果对其中一个克隆进行提交或推送.前提条件是,如果mercurial询问"此文件中有多少个硬链接?",Windows API mercurial正在使用应该给出正确的答案.
我们发现这个答案几乎总是错误的(如果hg进程在一台Windows计算机上运行且存储库文件在另一台Windows计算机上的网络共享上,则总是报告1,即使它实际上> 1).
要避免硬链接(使用--pull):
hg clone -U --pull c:\Dropbox\code c:\GoogleDrive\codeBackup
要检查硬链接:
fsutil hardlink list <file> :显示所有硬链接 <file>
find . -links +1 :显示硬链接> 1的所有文件
ls -l :显示每个文件旁边的硬链接计数
关于存储库损坏,这里最大的问题是您使用Dropbox和Google Drive在计算机之间同步存储库.
不要那样做!
这肯定会导致存储库损坏,除非您可以保证:
要验证Dropbox是否容易导致存储库损坏,请执行以下操作:
hg verify在机器A和B上的存储库中运行请注意,它们现在都已损坏:
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!
Run Code Online (Sandbox Code Playgroud)
而是获得一个免费的bitbucket或kiln帐户,并使用它来推送和拉动以跨多台计算机同步.
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |