Mercurial本地仓库备份

10
我非常支持备份。我把我的重要学校论文等放在Dropbox的文件夹中。我确保所有照片都备份到外部驱动器中。我有一个家庭服务器,里面保存着重要的文件,在服务器内部的两个驱动器之间进行镜像同步(类似软件RAID 1)。
对于我的代码,我一直使用Subversion进行备份。我维护具有应用程序稳定副本的主干文件夹,然后创建一个以我的用户名命名的分支,其中包含我的工作副本。我很少在提交之间对该分支进行更改,因为我知道该分支中的代码是我的备份。
现在我正在研究Mercurial,我必须承认我还没有真正使用过它,所以我可能搞错了。但是,它似乎对我来说,你拥有一个服务器端存储库,然后将其克隆到本地存储库形式的工作目录中。然后,在您处理某些内容时,您会对该本地存储库进行提交,当事物处于可与他人共享的状态时,您需要将其hg push到服务器上的父级存储库。
在稳定、经过测试且没有错误的代码推送之间,备份在哪里呢?
经过一番思考,我得出结论,Mercurial并没有旨在备份目的,并且假定您已经自行处理了备份。我想我需要将我的Mercurial本地存储库放在Dropbox或其他备份位置中,因为我的正在进行中的代码没有被推送到服务器上。
这就是它的全部内容吗,还是我错过了什么?如果您使用Mercurial,如何备份您的本地存储库?如果您今天早上打开电脑后硬盘烧毁(或更有可能的是读取头损坏,或操作系统出现故障等),会失去什么?如果您花费了过去一周的时间开发模块、编写测试用例、进行文档化和注释,然后病毒抹掉了您的本地存储库,那不是唯一的副本吗?
那么相反的情况呢?您是否为每个本地存储库创建远程存储库并一直推送到其中?

你如何找到平衡点?你如何确保你的代码有备份?在使用Mercurial作为备份和使用本地文件系统备份工具来保护本地存储库之间的界线是什么?

3个回答

11

把Subversion看作“备份”是可以的,但它之所以能够胜任这个角色仅仅是因为它在一个独立的机器上,而这并不是Subversion本质上所具备的。如果您的Subversion服务器与开发机器是同一台机器——在Linux世界中并不罕见——那么就无法从硬件故障、盗窃、火灾等方面保护您的数据,也就是说您并没有真正的备份。事实上,在这种情况下,有些数据根本没有备份——您当前的代码可能存在于两个位置,但存储库中的其他所有内容(例如修订历史记录)只存在于远程服务器上。

对于Mercurial来说完全相同,只是您省去了需要一个独立服务器的必要性,这意味着您必须明确地考虑备份而不是将其作为需要在某个地方拥有服务器的副产品。您肯定可以在其他地方设置另一个Mercurial存储库,并定期将更改推送到该存储库中,并将其视为备份。或者,像备份任何其他重要目录一样,直接备份本地存储库即可。您在本地拥有存储库的完整副本,包括所有修订历史记录和其他元数据,因此这种方式比您当前使用Subversion更方便和安全的备份方式。


Mercurial也会在每个代码仓库中保存被追踪分支的修订历史。 - kriss

9
“隐藏”的.hg目录存储了所有本地提交记录。您可以使用标准备份程序备份此目录。

2
那么,假设更改已经提交,我唯一需要备份的是 .hg 文件夹?有人能确认吗? - Jamin Grey

2
只有在推送时更改才能到达远程目录。提交保留本地,但如果克隆存储库,则可以获取它们。然后,是的,如果您希望将内容传输到服务器存储库,您必须“一直”推送到它。
另一方面,没有什么阻止您拥有多台机器并从一台机器推送内容到另一台机器。每个mercurial存储库都可以在几秒钟内打开服务器,只需键入“hg serve”。
我不确定这是否真正回答了您的问题,但我也是备份的忠实粉丝,并以我的存储库的许多克隆来管理事物(我还大量使用mq以补丁模式工作,但那是另一件事)。
PS:作为旁注,我正在考虑使用mercurial作为文件系统备份工具。唯一让我烦恼的是,出于此目的,我更喜欢禁用diff功能并将所有文件视为二进制文件,但这应该很容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接