如何从subversion最佳更新网站

时间:2008-10-16 13:12:51

标签: svn

我有一个由MySQL数据库支持的PHP网站和一个向subversion提交代码的程序员团队。通常我们编写代码,在本地测试代码,提交subversion,然后将更改的文件复制到隐藏区域进行在线测试。

但是可以犯错误。偶尔我想刷新网站,以便毫无疑问地知道网站代码和数据库确实代表了颠覆中的内容。我希望尽可能接近一键式解决方案,以便它是万无一失的。

最好的方法是什么?

顺便说一句,如果重要的话,我们会在Windows机器上开发。

10 个答案:

答案 0 :(得分:7)

每次提交后都可以使用post-commit钩子自动完成导出:

http://svnbook.red-bean.com/en/1.5/svn.ref.reposhooks.post-commit.html

您可以设置挂钩以自动将项目导出到隐藏区域内以进行在线测试。

答案 1 :(得分:4)

我不建议您将代码签出到生产服务器。这可能会暴露服务器上的svn控制文件(.svn)。

我建议使用与命令行svn和FTP客户端结合的脚本(python,ruby等)将文件从svn和ftp导出到服务器。 svn export命令可用于从svn服务器检出一组文件而不包含所有.svn目录。此外,不要忘记在执行此操作时标记svn存储库,以便检查已部署的内容。

答案 2 :(得分:2)

我们通过Subversion进行部署,并使用数据库迁移工具(使用模式版本控制)来执行此操作。

http://blog.lavablast.com/post/2008/02/I2c-for-one2c-welcome-our-new-revision-control-overlords!.aspx

(我们在.NET中开发)

答案 3 :(得分:1)

如果要将代码放在要运行它的位置,请执行以下操作?

答案 4 :(得分:1)

代码版本管理和数据库版本管理是两个非常不同的问题。我喜欢的解决方案分三个阶段(测试,部署测试,实时)而不是两个阶段完成。

  • 通过开发环境中的脚本更新代码并应用数据库更改
  • 将实时数据库下载到部署测试环境,还原并应用更改脚本
  • 针对'synchronized'实时数据库测试代码
  • 通过svn从存储库中的相关分支更新实时环境(我们通过ssh隧道实现,因为它是一个Linux环境)并将更改脚本应用于实时数据库

编辑:最好使用导出而不是结帐/更新来完成实时环境的更新。这不会让svn的控制文件徘徊不前。这可能会或可能不会产生安全隐患,它会强制您指定每次检查哪个分支。

你的“一键点击”可能是最后一步的脚本。

答案 5 :(得分:1)

如果您安装Subversion命令行客户端,则可以很容易地创建一个批处理文件/ shell脚本,该脚本将从存储库对服务器上的文件夹执行 checkout 导出最新修订。这要求你在Subversion中拥有与在服务器上相同的文件结构(当然,除非你想添加逻辑来改变脚本中的结构)。

答案 6 :(得分:1)

我建议您编写一些为您执行此操作的脚本。无论您是使用PHP还是其他方式执行此操作都取决于您。当你这样做时,请记住安全。

导出项目不会导出您可能设置的任何svn:externals,这意味着您需要执行多次导出。当你编写脚本时,它当然不应该成为一个问题。导出的另一件事,如果你投影很大(如果你使用大量的视频,PDF等),那么导出可能非常麻烦,特别是当您的版本控制在场外托管并且只能通过HTTP获得时。

我建议您进行结帐,并确保您的服务器无法提供位于隐藏.svn文件夹中的任何文件。

答案 7 :(得分:0)

我建议:

  • 将每个旧版本复制到自己的目录(以便快速恢复;您可能只需要保留其中一个)在服务器的非Web可访问部分。
  • 然后使用svn export从svn获取整个新版本。不要使用svn checkout,因为这会在整个地方留下.svn目录。

答案 8 :(得分:0)

感谢所有答案,帮助证明我做错了。 我们正在开发和测试在线subversion存储库的本地检出。 当我们想要部署新版本时,我们运行一个脚本,该脚本基本上删除实时测试服务器上的当前导出,创建新导出,然后通过rsync部署到所有Web服务器。

问题:由于全新导出,Rsync在部署到liveserver时始终会复制所有文件。我实际上从未花时间了解如何更新导出。

在另一台机器上我只有一个结帐并使用rsync部署--without .svn

答案 9 :(得分:0)

你检查过Beanstalk吗? http://beanstalkapp.com/这是一个SVN / GIT服务器,它具有自动FTP部署功能。