我是支持事情的忠实粉丝。我把我重要的学校论文放在Dropbox的一个文件夹里。我确保所有照片都复制到外部驱动器。我有一个家庭服务器,我将重要文件保存在服务器内的两个驱动器上(如软件RAID 1)。
因此,对于我的代码,我一直使用Subversion备份它。我保留trunk文件夹的应用程序的稳定副本,但后来我创建了一个用我的用户名命名的分支,里面有我的工作副本。我在该分支的提交之间做了很少的更改,并且知道那里的代码是我的备份。
现在我正在研究Mercurial,我必须承认我还没有真正使用它,所以我可能会把这一切都搞错了。但在我看来,您有一个服务器端存储库,然后以本地存储库的形式将其克隆到工作目录。然后,当您处理某些事情时,您将提交到该本地存储库,当事物处于要与其他人共享的状态时,您hg push
到服务器上的父存储库。
在推送稳定,经过测试,无错误的代码之间,备份在哪里?
在做了一些思考后,我得出的结论是,它不是用于备份目的,而是假设你自己处理了这个问题。我想我需要将我的Mercurial本地存储库保存在我的Dropbox或其他备份位置,因为我的正在进行的代码没有被推送到服务器。
这几乎是它,还是我错过了什么?如果您使用Mercurial,您如何备份本地存储库?如果你今天早上打开你的电脑并且你的硬盘驱动器起火了(或者更可能的是,读头坏了,或者操作系统自行损坏了......),会丢失什么?如果您在过去一周内开发了一个模块,为它编写测试用例,记录和评论它,然后病毒擦除了您的本地存储库,那不是唯一的副本吗?
那么另一方面,您是否为每个本地存储库创建了一个远程存储库并一直推送到它?
你如何找到平衡?您如何确保备份代码?使用Mercurial作为备份与使用本地文件系统备份实用程序保持本地存储库安全之间的界限在哪里?
答案 0 :(得分:11)
将Subversion视为“备份”是可以的,但它只是因为在一台单独的机器上才真正做到这一点,而Subversion并不是真正的内在机器。如果您的Subversion服务器与您的开发机器是同一台机器 - 在Linux世界中并不罕见 - 那么您就不会真正备份硬件故障,盗窃,火灾等等。事实上,有一些在这种情况下根本没有备份的数据 - 您当前的代码可能存在于两个地方,但存储库中的其他所有内容(例如修订历史记录)仅存在于远程服务器上的一个位置。
Mercurial完全相同,只是你已经消除了对单独服务器的需求,从而使你必须明确考虑备份而不是需要拥有服务器的副作用某处。您绝对可以在某处设置另一个Mercurial存储库,并定期将更改推送到该存储库并考虑您的备份。或者,只需备份本地存储库,就像备份任何其他重要目录一样。随着您在本地拥有存储库的完整副本,包括所有修订历史记录和其他元数据,这可能比您目前使用Subversion的方式更方便和安全。
答案 1 :(得分:9)
“hidden”.hg目录存储所有本地提交。您可以使用标准备份程序备份此目录。
答案 2 :(得分:2)
只有在您推送时,更改才会到达远程目录。提交保留在本地,但是如果克隆存储库,则会获得它们。然后,是的,如果你想让你的东西进入服务器存储库,你必须“一直”推送它。
另一方面,没有什么能阻止你拥有多台机器并将内容从一个机器推送到另一个机器。每个mercurial存储库都可以在几秒钟内输入“hg serve”。
我不确定它真的回答了你的问题,但我也是备份的忠实粉丝,并且通过我的存储库的许多克隆以这种方式管理事物(我也使用大量mq在补丁模式下工作但这是另一个故事)。
PS:作为旁注,我正在考虑使用mercurial作为文件系统备份的工具。唯一困扰我的是,为了这个目的,我宁愿禁用diff功能并将所有文件视为二进制文件,但这应该很容易。