我有一个由MySQL数据库支持的PHP网站和一个向subversion提交代码的程序员团队。通常我们编写代码,在本地测试代码,提交subversion,然后将更改的文件复制到隐藏区域进行在线测试。
但是可以犯错误。偶尔我想刷新网站,以便毫无疑问地知道网站代码和数据库确实代表了颠覆中的内容。我希望尽可能接近一键式解决方案,以便它是万无一失的。
最好的方法是什么?
顺便说一句,如果重要的话,我们会在Windows机器上开发。答案 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进行部署,并使用数据库迁移工具(使用模式版本控制)来执行此操作。
(我们在.NET中开发)
答案 3 :(得分:1)
如果要将代码放在要运行它的位置,请执行以下操作?
答案 4 :(得分:1)
代码版本管理和数据库版本管理是两个非常不同的问题。我喜欢的解决方案分三个阶段(测试,部署测试,实时)而不是两个阶段完成。
编辑:最好使用导出而不是结帐/更新来完成实时环境的更新。这不会让svn的控制文件徘徊不前。这可能会或可能不会产生安全隐患,它会强制您指定每次检查哪个分支。
你的“一键点击”可能是最后一步的脚本。
答案 5 :(得分:1)
如果您安装Subversion命令行客户端,则可以很容易地创建一个批处理文件/ shell脚本,该脚本将从存储库对服务器上的文件夹执行 checkout 导出最新修订。这要求你在Subversion中拥有与在服务器上相同的文件结构(当然,除非你想添加逻辑来改变脚本中的结构)。
答案 6 :(得分:1)
我建议您编写一些为您执行此操作的脚本。无论您是使用PHP还是其他方式执行此操作都取决于您。当你这样做时,请记住安全。
导出项目不会导出您可能设置的任何svn:externals,这意味着您需要执行多次导出。当你编写脚本时,它当然不应该成为一个问题。导出的另一件事,如果你投影很大(如果你使用大量的视频,PDF等),那么导出可能非常麻烦,特别是当您的版本控制在场外托管并且只能通过HTTP获得时。
我建议您进行结帐,并确保您的服务器无法提供位于隐藏.svn文件夹中的任何文件。
答案 7 :(得分:0)
我建议:
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部署功能。