【问题标题】:How to use SVN to manage Web sites?如何使用SVN管理网站?
【发布时间】:2013-01-17 04:34:50
【问题描述】:

我们的 Web 服务器上有一个 4Gb 数据。

我们考虑使用 Subversion (SVN) 来提高我们网站(4 Gb,主要是图片、Flash 和视频)和我们开发的其他网站上的可靠性并消除数据丢失。

我在我们的主站点上使用 SVN 的想法如下:

  • 为我们直接编辑的这些文件(例如 .html 文件、.pl 和 .pm 文件等)提供单独的 SVN 存储库
  • 拥有第二个 SVN 存储库来存储我们主站点的整个 4 Gb 转储,作为一种复杂的备份手段(能够在错误恢复的情况下与以后的更改合并)。
  • 为我们开发的其他网站提供更多 SVN 存储库。

我问:

  • 对于 4 Gb 版本,SVN 是否足够快且可扩展?提交需要多长时间?
  • 在我们的网站上有两个单独的存储库,用于所有数据和仅用于代码是否是个好主意?
  • 您能否提供一个(可能是 Bash 或 Perl)脚本来帮助我们根据请求更新服务器的 httpdocs/?
  • 如果有两台 Web 服务器,一台运行 HEAD 进行调试,另一台运行稳定的分支用于外部 Internet,会怎样?
  • 如何轻松管理我们在服务器上托管的多个站点的多个 SVN 存储库? (任何提示?)
  • 如何使用 SVN 管理数据库 (MySQL) 备份?

添加:我们不需要存储二进制文件的增量。大多数情况下,我们服务器上的二进制文件不会改变。但是我们需要一个快速的方法来判断二进制文件是否发生了变化。

【问题讨论】:

  • 在 repo 中拥有大的(编译的)Flash 和视频感觉有点不对劲。这并非不可能,但是……肯定不会对性能有好处。我会使用某种本地备份系统来处理这些问题,如果确实需要,它可以进行版本控制。
  • 相关,也许有帮助:Version control for binaries
  • 我在我的问题中添加了关于二进制文件的注释
  • We don't need to store deltas of binary files. 我认为 Subversion 不是正确的选择 - 它所做的一切都是存储它所包含内容的 Deltas

标签: svn version-control


【解决方案1】:

Subversion 不是常规备份和备份策略的替代品或竞争对手!!!

你必须使用 The Right Way (tm) 中的每一个工具!

【讨论】:

  • 但是我们需要对备份进行版本控制。如果在需要备份恢复的错误发生后发生更改怎么办?
  • 您需要 SCM(源代码控制管理)来处理网站来源,而不是工件。二进制工件由其他工具管理
  • @porton 版本控制不是备份。它是一个系统,您可以通过这种方式监控感兴趣的文件,以便您可以识别更改的内容和时间。如果未跟踪单个感兴趣的文件,您将无法恢复。如果单个感兴趣的文件没有手动更新(而是实时的,就像在没有签入的情况下实时编辑网站时发生的那样),那么您将无法恢复。如果您结帐到实时 Web 服务器,您最终会后悔的。准备好上面的解决方案,使用 Maven 站点来管理二进制文件,它真的真的擅长该任务。
  • 由于整个版本控制系统只管理感兴趣的文件,所以在尚未包含文件的区域进行开发和测试是关键;因为,这是您确定能够恢复“整个”网站的唯一方法。这意味着一个“构建过程”,它将文件组装到正确的目录结构中。 Maven 可能不是专门为这项工作而构建的工具,但它可以很好地吸收和管理二进制文件,并将它们集成到您网站的“构建(可以复制)”树中。
【解决方案2】:

SVN 擅长源代码控制(这是它的设计目的)。任何源代码控制系统也是如此,您要求它管理的非源代码越多,您期望的满意度就越低。

Maven 存储库擅长二进制代码管理(这是它的设计初衷)。您基本上可以签入任何特定文件(具有最小的“maven 项目结构”),然后 Maven 可以提供它来满足其他项目可能具有的“依赖关系”。

也许是一个 SVN 签入的 Maven 项目,用于源代码(也称为 HTML / Javascript / CSS / 等)的东西,以及 Maven 项目中二进制文件(图像、视频、PDF 等)的依赖项?然后你会有一个如下所示的部署过程:

  1. 结帐到构建位置,(svn checkout)
  2. 建立网站(mvn install,这将吸收依赖的二进制文件)
  3. 将网站打包(mvn package 可能为 zip 文件或 tar.gz)。
  4. (稍后)部署网站(mvn deploy 可能根据活动配置文件(生产、开发)部署到不同的位置)

无论你做什么,都要避免以下反模式,它们会给你带来比你想象的更多的悲痛:

  1. 不要直接签出到要部署的 Web 服务器。
  2. 不要跳过网站的打包,否则将变得难以/无法回滚(甚至无法确保完全部署)。
  3. 不要期望在实时目录中开发网站。习惯于开发网站、构建网站、在本地部署(Maven 可以让这一切变得简单),然后签入您的更改(如果看起来不错的话)。

尝试重新设计您的站点以允许部署到任何计算机/目录位置,从而在上线之前促进在验证服务器/位置“启动站点”。 Maven 提供了“配置文件”,可以帮助分离实时站点和通用开发人员站点。请记住避免 Maven site 目标,因为这不是您正在开发的产品,而是用于跟踪进度/质量的管理产品产品的名称(您开发的网站)。

最终使用 SVN / Maven,您可以在 Jenkins 服务器中为您执行“主线”构建。稍后您可以添加 Selenium 服务器以进行自动化集成测试,并利用持续部署实践,但每次只需一小步。选择这条路还不错,但除非您已经对工具有所了解,否则您可能需要学习一些东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2013-01-07
    • 2010-11-12
    • 2012-07-02
    相关资源
    最近更新 更多