3

在实时网站上维护备份和修订控制的最佳解决方案是什么?

作为我工作的一部分,我与几个实时网站合作。随着时间的推移,我们需要一种有效的方法来维护活动文件夹的备份。此外,更新这些站点可能会很痛苦,特别是如果更改发生在实时环境中,无论出于何种原因。

理想的情况是无忧的源代码控制。我实施了一段时间的 SVN,它作为备份和修订控制(轻松恢复临时或重大更改)等的半解决方案非常棒。

不幸的是,SVN 将 .SVN 隐藏目录放置在任何地方,这会导致问题,尤其是当其他开发人员更改文件夹结构或复制/移动网站目录时。我听说这是教育等问题,但 SVN 采取的方法对我们来说根本不是一个实际的解决方案。

我在想也许增量备份解决方案可能会更好。

其他可能性包括:

  1. SVK,这只是命令行,这成为一个问题。此外,我不确定这是否合适。
  2. Mercurial,可能带有一些触发器来隐藏分布式组件,这在这种情况下是不需要的,并且对于其他开发人员来说会不必要地复杂化。

    我对 Mercurial 进行了简短的试验,但找不到一个很好的方法来分离存储库并与实时文件夹工作副本保持同步。也许作为一个源代码控制解决方案(使存储库和活动文件夹在同一个地方)与另一个备份解决方案相结合,这可能是要走的路。

    Mercurial 的一个缺点是它不会将空文件夹置于源代码控制之下,这对于经常将空文件夹作为文件上传等占位符位置的网站来说是个问题。

  3. Rsync,我还没有真正调查过。

我非常感谢您就维护实时网站备份的最佳方式提出的建议,最好是通过一种简单的方法快速检索过去的版本。

回复回复:

  • @基比

    • 与其说是教育,不如说是对 VSS 以外的任何东西都不熟悉,而且缺乏时间/精力来学习其他任何东西。

    • 我想 xcopy/7-zip 方法听起来很合理,但它很快就会占用很多空间,对吧?

    • 至于源代码控制,我想我希望源代码控制只是说“这是文件夹现在的状态,我会处理它,如果我不能匹配东西那是你的错,我”只会开始新的历史”,而不是努力失败。

  • @史蒂夫米

    • 是的,这是一种更好的方式,但需要进行重大的文化变革。话虽如此,我非常喜欢这种方法。
  • @mk

    • 不错,我没想过用 Rsync 来部署。这只会上传差异吗?由于站点停机,每次我们进行更改时覆盖整个实时目录都会有问题。

我仍然很好奇是否有更传统的选择

4

4 回答 4

4

您仍然可以使用 SVN,但不是在您的实时环境中进行检查,而是进行导出,这样就不会创建 .svn 目录。当然,缺点是您的实时环境中不会发生任何代码更改。这是一件好事。

作为一般规则,决不允许在生产系统上更改代码。应该在开发/测试/UAT 环境中进行更改和测试,然后一旦确认正常,您可以在 SVN 中使用 RELEASE-xxx 之类的标记该代码。然后,在实时系统上,导出带有该标签的代码。

于 2008-08-26T02:37:51.423 回答
2

我们使用选项 3. Rsync。我编写了一个 bash 脚本来执行此操作以及一些额外的检查,但这里是它的基本功能。

  1. 为推动生活做一个标签。
  2. 在该标签上运行 svn export。
  3. rsync 来生活。

到目前为止,它一直在发挥作用。我们不必担心用户冲突或有单独的用户在生产机器上运行 svn up。

于 2008-08-26T02:49:17.497 回答
1

如果人们在移动、删除或添加文件而不告诉源代码控制系统,那么您选择的任何源代码控制解决方案都会出现问题。我不知道任何可以解决此问题的源代码管理项目。

如果您无法教育从事该项目的人员[1],那么您可能只需要使用每日快照。像使用 xcopy 到网络驱动器的批处理文件一样简单的东西,可能是命令行上的 7-zip 来压缩它,这样它就不会占用太多空间,这可能是最简单的解决方案。

[1] 我非常不相信这一点,可能更多的是人们太固执,不愿意学习,或者做“额外的工作”。当他们不得不回到以前的版本,或者两个人编辑了同一个文件时,不管源代码控制可以为他们节省多少时间。

于 2008-08-26T02:37:57.663 回答
1

rsync 只会上传差异。我没有亲自使用过它,但Mark Pilgrim很久以前就写过它如何出色地处理二进制差异

svn+rsync 听起来是一个很棒的解决方案。我以后一定要试试。

于 2008-08-29T22:40:49.420 回答