您为代码使用什么备份策略?

时间:2008-12-29 18:54:24

标签: version-control backup

每个人都使用源代码控制来管理版本(对吗?),这提供了一定程度的备份。但是,有时您的本地副本与存储库不同步。此外,一些沙盒类型的项目可能还没有;-)使其成为SCC。

编辑:我的项目目录中有多个项目。并非所有都在当前的开发中,但是每当发现错误时,其中任何一个都可能需要“修复”。从SCC恢复一个活跃的项目似乎非常合理。恢复我从SCC支持的所有十几个项目似乎不如从备份恢复和必要时从SCC进行同步。

您使用哪些备份策略(源代码控制除外)来保护您的代码安全?

类似的问题可以在https://stackoverflow.com/questions/38388/organization-wide-backup-strategy找到,但如果你碰巧在一个没有完全策略的组织工作,我更有兴趣听别人的个人策略。我将在答案中提供我的策略。

28 个答案:

答案 0 :(得分:31)

我的策略始终是签入,并备份整个存储库。

从不将任何内容从源代码管理中删除,我确保定期备份(每日增量,每周完整和每月轮换)正在发生并且正常运行。

答案 1 :(得分:11)

在一天结束时,我将代码检查到源代码管理中。

午夜时分Mozy启动并备份我的代码。

凌晨1点左右,SC盒将备份到磁带上。

凌晨3点左右Syncback SE唤醒并将我的代码备份到外部高清。

我的工作箱全天使用Live Sync

与我的主页框同步

答案 2 :(得分:6)

(除了对远程服务器的源代码控制)我使用免费版的SyncBack(www.2brightsparks.com)和这个批处理文件:(其中syncback.exe的参数指定先前配置的同步备份配置文件)

@echo off

echo Stop and start SQL Server
echo -------------------------

net stop "SQL Server (SQLEXPRESS)"
net stop "SQL Server (SQLSERVER2008)"
echo -----------------------------------------------------------
echo Back up running now... please wait.

"C:\Program Files\2BrightSparks\SyncBack\SyncBack.exe" c e-contents f-contents

echo Backing up done. Starting SQL Server...
echo -----------------------------------------------------------

net start "SQL Server (SQLEXPRESS)"
net start "SQL Server (SQLSERVER2008)"

echo -----------------------------------------------------------
echo Back up is done and SQL Server is running now.
echo -----------------------------------------------------------

pause
每天都有两个8GB闪存盘。在本周末,我做同样的事情,但然后针对桌面外置硬盘。

SyncBack太棒了!

答案 3 :(得分:6)

OSX的Time Machine

答案 4 :(得分:5)

在我看来,不时地从SCC重建一切都是一种很好的做法(例如在夜间)。这样做可确保您没有忘记将任何基本文件添加到存储库。无论如何,整个程序最多只需要几个步骤。

答案 5 :(得分:3)

  

没有人想要重建他们的   来自SCC的整个项目目录if   磁盘驱动器死了

咦?我们始终这样做。事实上,我们有一个构建服务器,可以通过干净的结账继续执行新的构建。如果从备份恢复似乎比从SCC恢复更好,则需要改进SCC。

对于尚未准备好生产的所有代码,我们在SCC中有一个名为“playground”和“junk”的目录。

答案 6 :(得分:3)

对于除了最简单的5分钟测试之外的所有内容,我使用版本控制,在我的情况下使用Subversion。

我使用了一些我运行linux的旧硬件和一个我承诺的Subversion服务器。然后我每天晚上都有一个cron脚本存档存储库(如果自上次更改),并通过邮件将其附加到我的gmail帐户中,其中包含正文中的更改日志。对于Gmail上的20 MB附件限制,除了最多二进制密集型存储库之外,可以通过拆分文件来备份。

我打算重做这个以将备份放在Amazon S3上,但还没有完成它。

最重要的是,恕我直言总是在其他地方(地理位置)备份,而不仅仅是在USB驱动器或其他地方。

非常小的5分钟。测试我将它们放在我的DropBox(www.getdropbox.com)中。

答案 7 :(得分:3)

我使用Microsoft SyncToy 2.0将我的项目目录与网络共享上的文件夹同步。我有单独的计划任务,为各种目录运行不同的SyncToy脚本(按Visual Studio版本细分)。

答案 8 :(得分:2)

版本控制(SVN)对我来说已经足够了。然而,有一些规则:

  • 我尽可能经常地工作(4-6个小时的工作而没有承诺已经开始创造出一些出错的刺痛感。)
  • 解决方案的SVN结构总是原子的。您只需要一个新的CheckOut,以便能够在任何解决方案上运行“rebuild-copy-package”集成脚本(运行测试可能需要在此之前提供数据库连接设置)。
  • SVN服务器可靠并定期备份。
  • 只有通过提交才能在组成应用程序的不同解决方案(即从开源共享库到利用它的内部代码)之间传播更改(集成服务器选择此方法并创建可在解决方案中使用的软件包-stream)。
  • 沙箱项目(原型)始终保存在SVN(Trunk或Tags的兄弟)的Prototypes文件夹中,名为“YYYY-MM-DD PrototypeName”

答案 9 :(得分:2)

请勿使用双向同步工具进行备份

......好吧,至少不会自动

同步工具(例如,同步)同步两个(或更多)位置。因此,如果你不小心弄乱了一个位置的文件,那么这个混乱就会变成另一个,你就不会注意到了。

答案 10 :(得分:2)

我使用Unison在家里的两台不同机器上复制我的整个主目录。这样,如果我马虎,或者我有20岁的文件不受源代码控制(.emacs),我仍然有一定程度的保护。我还在工作的机器上复制除个人文件(照片,音乐)之外的所有内容。

答案 11 :(得分:2)

虽然这是一个主观的答案,但我认为你没有正确使用源代码控制。

是的,您的本地副本通常与存储库不同步,但任何给定的更改应该只是少量的工作(例如,您不应该有几天没有签入的东西) 。如果您经常提交,那么在驱动器丢失(盗窃/故障/等)的情况下,您将丢失少量(通常<1天)工作。

如果您正在做一些对其他开发人员具有破坏性的完全疯狂的事情,那么您应该在分支机构工作。完成后,合并您的更改。

您还应该能够随时从SCC系统重建项目。这是一件好事,不时只是为了确保您需要构建的所有内容都在SCC中 - 有时文件会被遗漏,而您永远不会注意到,因为您始终使用您一直使用的工作副本构建过去6个月。

答案 12 :(得分:2)

我使用Mercurial作为我的版本控制系统。我使用Windows笔记本电脑上的存储库作为我的主存储库,但是使用Mercurial的克隆功能每两到三天将它备份到我的ubuntu服务器。我还使用sync toy将重要的directorys备份到闪存驱动器,包括我的笔记本电脑上的存储库副本。

答案 13 :(得分:1)

我们还检查所有内容(早期检查并经常检查)并使用tar备份整个存储库(CVS)并将其备份到我们的备份服务器。

答案 14 :(得分:1)

我使用的产品(我写的,这是我的micro-isv),称为Transactor Code Agent。它是专为程序员设计的备份工具。

它会监视您的源代码,每次保存更改时,它都会对其进行备份并为您保留本地历史记录。

我认为备份比源代码控制更好,原因如下:

  1. 源代码管理旨在成为一种变更管理工具,帮助您的程序从一致状态转移到另一种状态
  2. 您不必担心维护私人分支
  3. 您不必为了备份而中断工作以进行检查。您可以专注于编写代码,并在完成后检查您的内容。
  4. 您可以在此处下载演示文稿:

    http://www.transactor.com/download

答案 15 :(得分:1)

当您编写的内容(尚未)属于主构建时,请创建分支。 当它应该进入主构建时,将你的分支与它合并。

分布式VCS也使本地分支变得非常容易,中央存储库永远不会知道它们存在。

通过将更改推送到远程副本来备份(分布式VCS的)本地存储库是非常简单的,我使用git作为我的主要备份方法,对于大多数文档,配置文件,基本上任何非二进制文件。

答案 16 :(得分:1)

未签入(并因此备份)到您的VCS的代码,不存在。它并不比你刚才拥有的代码更真实。真的很简单。

答案 17 :(得分:1)

我正在开发名为“Transactor Code Agent”的产品,该产品旨在满足您的要求。

它为源文件提供本地备份和版本控制。

它允许您使用现有的源代码控制设置来实现它的目的(管理多个开发人员在多个版本中“大部分已完成”的工作),同时为您提供自动备份和本地文件版本控制工作

测试版应该会在1月份的某个时候推出。

您可以在

看到我们的“网站”(有点粗略)

www.transactor.com

您可以使用表格注册私人测试版。

<强>更新

根据我在评论中得到的一些反馈,这里有更多信息:

1)我有源控制吗?

没有!我认为源代码控制是一件很棒的事情。如果使用得当,它为管理软件生命周期提供了巨大的工具。

但是,如果使用得当,源代码控制会留下很大的差距,因为它不会保护开发人员的工作直到完成。我们需要的是专注于个别程序员正在进行的工作。代码执行此操作。

换句话说,源代码管理是一种旨在让老板的生活更轻松的工具(因为它有助于管理器功能和变更以及团队和版本随着时间的推移)

Code Agent是一款旨在让您的生活更轻松的工具(因为它确保您的工作始终得到保存)。

答案 18 :(得分:1)

如果您在很长一段时间内与源代码控制分道扬,那么您需要一些分布式源代码控制。

答案 19 :(得分:0)

如果任何事情都失败了,我有时会将自己正在处理的重要内容通过电子邮件发送到网络邮件帐户,例如yahoo或hotmail。我知道每个人都在谈论从纸张切换到数字,但有时你永远不会知道会发生什么,所以我会打印出硬拷贝。显然,这不是最好的解决方案,特别是对于大型项目,因此我通常会将硬拷贝限制为更小,更重要的部分。我也倾向于有点偏执,所以我最终会备份备份备份。

答案 20 :(得分:0)

我使用rdiff-backup通过SSH执行笔记本电脑的每日增量备份。它使用deltra压缩(如rsync),所以它非常快。它还允许您在备份数据中返回任意天数,以便在完成一些复杂的代码之后,但在您意外删除所有代码之前,可以返回到正确的位置。

开始行动有点棘手,但在我看来非常值得。

答案 21 :(得分:0)

除了颠覆,我使用crashplan进行在线异地备份。它还可以备份到本地存储和其他计算机(但遗憾的是,目前似乎需要在每个目的地存储相同的备份集 - 即不能在场外存储一小组重要的东西,而在本地存储更大的集合。)

我也使用unison(对于太大而无法在场外备份的音乐,电影等)和OSX时间段,以便在数据丢失的情况下,我可以希望在不使用在线备份的情况下进行恢复。在线备份适用于房屋烧毁或被盗等灾难。

答案 22 :(得分:0)

  

但是,有时候本地副本与存储库不同步。此外,一些沙盒类型的项目可能还没有;-)使其成为SCC。

首先,您应该尽量减少代码“退出”SCC的时间。不是为了备份目的,而是为了跟踪什么时候做,特别是为什么。提交评论无价值。包含3000个文件并带有“初始修订版”消息的大签到不是很有用。

沙箱项目参数确实有一些重要性,但是你应该像处理所有其他文件一样对待它。将它们备份到外部USB驱动器或其他任何设备。如果你没有备份所有其他文件,我建议你现在就开始。

  

当然,如果磁盘驱动器出现故障,没有人希望从SCC重建整个项目目录 - 只需从实际备份中恢复就好了。

这不仅仅是svn checkout吗?为什么不“从SCC重建”?

答案 23 :(得分:0)

Subversion:服务器由Beanstalk管理,客户端使用Tortoise SVN。在每次编码会话之后,一切都会回到SVN存储库,所以我永远不必担心丢失代码。我还会定期将最新的代码备份到CD并将其锁定在保险库中以确保!

另外,请记住,您的代码只是等式的一部分。大多数现代开发环境本身都需要大量定制(集成第三方工具是明显的例子,但只需安装具有适当选项的IDE也需要相当长的时间)。因此,我还在虚拟机中完成了所有开发工作,可以轻松备份到外部硬盘驱动器。这些也被锁定在金库中。

最后,我备份一个“参考”数据库来完成图片。我不能只备份架构,因为在我的产品中,数据库中保留了大量系统数据(例如,随网站提供的内容)。

答案 24 :(得分:0)

我使用MozyPro自动对我机器上的当前代码以及源代码控制数据库进行异地备份。这种情况每晚都会逐渐增加。

答案 25 :(得分:0)

由于我使用TFS(Team Foundation Server),我只是像我使用的任何其他数据库一样备份SQL Server数据库

答案 26 :(得分:0)

在线(Internet)备份是此过程的重要部分。

除非由指定的个人(例如秘密人员)制作,否则对外部驱动器的所有备份都注定要失败。如果你是一个非常小的商店(或像我这样的μ-ISV),这不是一个选择。即使这样,外部驱动器在哪里?防火保险是唯一可能的好答案。将它们存放在场外并不好:人们会忘记把它带回办公室进行定期备份。

备份到NAS是恕我直言,比外部驱动器更好的解决方案。但是,在建筑物着火的那一天,异地备份是您唯一的生存机会。

我个人使用Mozy来备份除SCC DB之外的主要本地目录。

毋庸置疑,AES-256或类似的加密是将源代码存储在别人硬盘上的必备条件。 Mozy及其所有严肃的竞争对手都提供它。

答案 27 :(得分:0)

来自joelonsoftware的joel在一些帖子中说,如果构建和部署你的项目需要两个以上的命令行(或准备工作超过一分钟),那你就错了。我完全赞同他,我认为SCM应该足够了。备份系统仅适用于灾难性灾难(硬盘故障,火灾和龙卷风)。