代码之家  ›  专栏  ›  技术社区  ›  tvanfosson

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

  •  20
  • tvanfosson  · 技术社区  · 17 年前

    :我的项目目录中有多个项目。并不是所有的都在当前的开发中,但任何一个都可能需要在发现bug时进行“修复”。从SCC恢复单个活动项目似乎是完全合理的。从SCC中恢复我支持的几十个项目中的所有项目似乎比从备份中恢复并在必要时从SCC中同步更不合理。

    除了源代码控制之外,您还使用哪些备份策略来保证代码的安全?

    类似的问题可以在 https://stackoverflow.com/questions/38388/organization-wide-backup-strategy

    28 回复  |  直到 9 年前
        1
  •  31
  •   Vinko Vrsalovic    17 年前

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

    保留源代码管理之外的任何内容,我会确保定期备份(每日增量备份、每周完整备份和每月轮换备份)正在进行并正常运行。

        2
  •  13
  •   PhiLho    17 年前

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

    午夜左右 Mozy 在网站外启动并备份我的代码。

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

    Syncback SE唤醒并将我的代码备份到外部HD。

    一整天,我的工作箱都使用 Live Sync

        3
  •  6
  •   rp.    17 年前

    (除了远程服务器的源代码控制之外)我使用免费版本的SyncBack(www.2brightsparks.com)和此批处理文件:(其中SyncBack.exe的参数指定以前配置的SyncBack备份配置文件)

    @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闪存驱动器。在本周末,我做了同样的事情,但目标是桌面外置驱动器。

        4
  •  6
  •   Hates_    17 年前
        5
  •  5
  •   Reunanen    17 年前

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

        6
  •  3
  •   tvanfosson    17 年前

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

        7
  •  3
  •   stpe    17 年前

    除了最简单的5分钟测试之外,我使用版本控制,在我的例子中是Subversion。

    我使用了一些运行linux的旧硬件和我承诺使用的Subversion服务器。然后,我每天晚上都会有一个cron脚本来存档存储库(如果从上次开始更改过的话),并在邮件中将其附加到我的gmail帐户中,并在正文中添加changelog。Gmail上有20 mb的附件限制,除了二进制文件最密集的存储库外,所有存储库都可以通过拆分文件进行备份。

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

    如果是非常小的5分钟测试,我会把它们放在我的DropBox(www.getdropbox.com)中。

        8
  •  3
  •   martinus    17 年前

    磁盘驱动器坏了

    嗯?我们 总是

    对于所有尚未投入生产的代码,我们在SCC中有一个名为“游乐场”和“垃圾”的目录。

        9
  •  2
  •   gregmac    17 年前

    虽然这是一个主观的答案,但我认为您没有正确地使用源代码管理。

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

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

        10
  •  2
  •   Jared    17 年前

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

        11
  •  2
  •   Norman Ramsey    17 年前

    我用 Unison 在家里的两台不同的机器上复制我的整个主目录。如果我很邋遢,或者有20年的文件不在源代码管理之下,可以这样做( .emacs )我仍然有一定的保护措施。除了个人文件(照片、音乐)外,我还可以在工作时在机器上复制所有东西。

        12
  •  2
  •   Rinat Abdullin    17 年前

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

    • 解的SVN结构总是原子的。为了能够在任何解决方案上运行“rebuild copy package”集成脚本,您只需重新签出即可(运行测试可能需要在此之前提供DB连接设置)。
    • 更改仅通过提交在构成应用程序的不同解决方案之间传播(即从开放源代码共享库传播到利用它的内部代码)(integration server接收此更改并创建可在解决方案下游使用的包)。
        13
  •  2
  •   Boris Gorelik    17 年前

    ... 至少不是自动的

    两个(或更多)位置。因此,如果您不小心在一个位置弄乱了一个文件,那么该文件将被转换到另一个位置,而您不会注意到。

        14
  •  1
  •   Jim Blizard    17 年前

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

        15
  •  1
  •   Waquo    17 年前

    当您编写不属于主构建的内容时,请创建一个分支。 当它应该进入主构建时,将您的分支与它合并。

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

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

        16
  •  1
  •   Javier    17 年前

        17
  •  1
  •   JesperE    17 年前

    未签入(并因此备份)到VCS的代码, 不存在

        18
  •  1
  •   Scott Wisniewski    17 年前

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

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

    www.transactor.com

    那里有一个表格,你可以用来注册私人测试版。

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

    1) 我有一个关于源代码管理的东西吗?

    但是,当它被正确使用时,源代码管理会留下一个很大的缺口,在它完成之前,它不会保护开发人员的工作。我们需要的是关注单个程序员正在进行的工作。代码代理就是这样做的。

    换言之,源代码管理是一种工具,旨在让老板的生活更轻松(因为它有助于管理功能和更改以及团队和版本)

        19
  •  1
  •   Scott Wisniewski    16 年前

    我使用一种产品(我写的,它是我的微型isv),叫做Transactior代码代理。它是专门为程序员设计的备份工具。

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

    我认为它在备份方面比源代码管理好得多,原因如下:

    1. 源代码管理是一种变更管理工具,帮助您的程序从一个一致的状态转移到另一个一致的状态
    2. 您不必中断工作来进行纯粹出于备份目的的检查。你可以专注于编写代码,完成后签入你的东西。

    您可以在此处下载它的演示:

    http://www.transactor.com/download

        20
  •  0
  •   juan    17 年前

    因为我使用TFS(Team Foundation Server),所以我只备份SQL Server数据库作为我使用的任何其他数据库。

        21
  •  0
  •   Xaisoft    17 年前

    万一有什么事情失败了,我有时会把我正在处理的重要信息通过电子邮件发送给雅虎或hotmail等网络邮件帐户。我知道每个人都在谈论从纸质到数字的转换,但有时你永远不知道会发生什么,所以我会打印硬拷贝。显然,这不是最好的解决方案,特别是对于大型项目,因此我通常会将硬拷贝限制在更小、更重要的部分。我也倾向于有点偏执,所以我最终会备份一个备份的备份。

        22
  •  0
  •   Sarel Botha    17 年前

    这有点棘手,但在我看来是值得的。

        23
  •  0
  •   frankodwyer    17 年前

    crashplan 用于在线异地备份。它还可以备份到本地存储和其他计算机(不幸的是,目前似乎需要在每个目标存储相同的备份集,即不能在异地存储少量重要内容,而在本地存储较大的备份集。)

    我还使用unison(用于太大而无法异地备份的东西,如音乐、电影等)和OSX时间胶囊,这样在数据丢失的情况下,我就可以在不借助在线备份的情况下进行恢复。在线备份的目的是为了应对房屋烧毁或被盗等灾难。

        24
  •  0
  •   Orion Edwards    17 年前

    但是,有时您的本地副本与存储库不同步。此外,一些沙箱类型的项目可能还没有;-)把它做成SCC。

    . 提交评论是 极宝贵的 . 包含3000个文件并带有“初始修订”消息的大签入不是很有用。

    svn checkout ? 为什么不只是“从SCC重建”?

        25
  •  0
  •   Mark Brittingham    17 年前

    Subversion:服务器由Beanstalk管理,客户端使用Tortoise SVN。在每次编码会话之后,所有内容都会返回到SVN存储库,因此我不必担心丢失代码。我还定期将最新代码备份到CD中,并将其锁定在vault中以确保安全!

    最后,我备份了一个“参考”数据库来完成图片。我不能只备份模式,因为在我的产品中,数据库中保存着大量的系统数据(例如,网站交付的内容)。

        26
  •  0
  •   pro    17 年前

    我用 MozyPro 自动对我机器上的当前代码以及源代码控制数据库进行异地备份。这是每天晚上递增运行的。

        27
  •  0
  •   Serge Wautier    16 年前

    所有类型的外部驱动器备份都注定会失败,除非它们是由指定的人员(如安全人员)进行的。如果你是一个非常小的商店(或者像我这样的ISV),这不是一个选择。即使如此,外部驱动器存放在哪里?带防火装置的保险箱是唯一可能的好答案。将它们存放在异地并不好:人们会忘记将其带回办公室进行定期备份。

    备份到NAS是比外部驱动器更好的解决方案。但在大楼着火的那天,非现场备份是你生存的唯一机会。

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

        28
  •  0
  •   knoopx    16 年前

    joelonsoftware的joel在一篇帖子中说,如果构建和部署项目需要两条以上的命令行(或者准备工作需要一分钟以上),那么你就做错了。我完全同意他的观点,我认为SCM就足够了。备份系统只适用于灾难性灾难(硬盘故障、火灾和龙卷风)。