Jim*_*ker 6 backup mercurial timestamp
有没有办法在保留文件的时间戳的同时备份mercurial存储库?
现在,我正在使用hg clone将存储库复制到临时目录,备份程序从那里获取文件.我没有将备份程序直接指向存储库,因为我不希望它在备份发生时更改(来自提交).
问题是将hg clone所有文件的时间戳更改为当前时间,因此备份程序(我无法更改)认为所有内容都已被修改.
计划A:当源和目标目录驻留在同一文件系统上时,hg clone -U只需将其所有文件硬链接在存储库中,而不更改时间戳.这种方法非常快速且始终安全(文件在写入时懒惰地取消链接).
如果需要,可以先在同一文件系统上进行克隆,然后将此新克隆rsync同步到另一个文件系统.
B计划:这是通常的安全使用rsync或其他一些基于文件的同步工具.Mercurial不会在磁盘上存储任何神奇的东西,只是普通文件.
有一个竞争条件,当你碰巧在rsync运行的同时提交到这个存储库时,但我认为它可以忽略不计,因为hg rollback如果从一个损坏的备份恢复," "应该能够清理你的这种不一致.请注意,如果在rsync窗口中有多个单独的事务(例如多个"push"或"commit"命令),或者运行篡改历史记录的破坏性操作(例如rebase ,和某些MQ命令),则回滚无法恢复hg strip.
我建议使用hg pull而不是hg clone.因此,您将在服务器上保留存储库的镜像,并定期更新它hg pull.然后,让你的备份程序采取的备份是.当您使用时,hg pull您将转移最新的历史记录,并且仅转换.hg/store/data实际受拉动影响的文件.
在这里,我通过制作一个包含两个文件的小型回购来测试这个:a.txt和b.txt.然后我使用了将存储库"克隆到服务器" hg clone --noupdate.这确保了我们在服务器上没有工作副本 - 它只需要找到的历史记录.hg.
克隆后的时间戳如下所示:
% ll --time-style=full .hg/store/data total 8.0K -rw-r--r-- 1 mg mg 76 2009-11-25 20:07:52.000000000 +0100 a.txt.i -rw-r--r-- 1 mg mg 69 2009-11-25 20:07:52.000000000 +0100 b.txt.i
正如您所指出的,它们都是相同的,因为文件都是由克隆操作创建的.然后我更改了原始存储库(客户端上的存储库)并进行了提交.拉动变更集后,我得到了这些时间戳:
% ll --time-style=full .hg/store/data total 8.0K -rw-r--r-- 1 mg mg 159 2009-11-25 20:08:47.000000000 +0100 a.txt.i -rw-r--r-- 1 mg mg 69 2009-11-25 20:07:52.000000000 +0100 b.txt.i
注意时间戳是如何a.txt.i更新的(我只a.txt在我的提交中触及),而时间戳b.txt.i保持不变.
如果您的备份软件是智能的,它甚至会注意到Mercurial只附加了数据a.txt.i.这意味着新a.txt.i文件a.txt.i在某一点上与旧文件相同- 因此备份程序只应复制文件的最后部分.Rsync是一个备注程序的例子,会注意到这一点.
| 归档时间: |
|
| 查看次数: |
3319 次 |
| 最近记录: |