繁体   English   中英

使用SVN控制PHP站点的最佳方法是什么?

[英]What's the best way to use SVN to version control a PHP site?

我一直只是从网站上下载FTP文件,编辑它们并在创建网站时将它们备份,但是觉得值得学习正确的事情。

我刚刚将所有内容提交到SVN repo,并尝试sshing到服务器并检查标记的构建,以及使用switch更新该构建。

一切都很好,但它比我目前的流程慢得多。

设置这样的东西最好的方法是什么? 我的大部分时间只是错误修复或小改动,而不是大的重写,所以我经常更新的东西。

您不一定需要使用SVN将文件部署到服务器。 继续使用FTP,只使用SVN进行修订历史记录。

您应该查看安装rsync以将更改上载到您的服务器。

Rsync很棒,因为它将您的本地repo副本与当前服务器上的副本进行比较,然后只发送已更改的文件。

这可以节省您必须记住您更改的每个文件并手动选择它们到FTP,或者必须再次将整个本地副本上载到服务器(并让FTP进行比较)。

Rsync还允许您在服务器之间同步时排除文件/文件夹(即.svn /文件夹)。

我建议您继续使用Subversion来跟踪所有更改,甚至是错误修复。 当您希望部署到生产服务器时,应使用SSH并调用svn update 这个过程可以使用Capistrano自动化,这意味着您可以坐在本地盒子上并调用cap deploy - Capistrano将SSH连接到您的服务器并执行Subversion更新。 节省了大量繁琐的手工劳动。

为了快速更新,我只需从服务器运行svn update

有时为了真正快速更新我使用vim编辑文件并从服务器提交它们。

它不是很合适,但速度快且非常可靠。

如果要正确执行此操作,您一定要考虑设置本地SVN存储库。 我还强烈建议设置一个连续集成(CI)服务器,例如巡航控制,当您登录svn时,它会自动运行针对PHP代码的任何测试。 一旦通过测试,您的CI服务器也可用于通过FTP将文件发布到主机上,只需单击按钮即可。

虽然这听起来像是很多工作,但实际上并非如此,从长远来看,平稳部署过程的好处不仅仅是收益。

对于我的项目,我通常有一个回购。 在我的笔记本电脑上是一个工作副本,实时网站是一个工作副本。 我使用本地网络服务器在本地副本上进行更改。 当一切都经过测试并准备就绪时,我提交更改,然后我ssh到远程服务器和svn更新。

我还在此存储库中保留一个文件夹,其中包含我对数据库结构所做的任何更改的sql文件,并根据其修订版号进行标记。 例如,当我提交版本74并且其中一个表中有一些额外的列时,提交中包含的将是dbupdates / rev74.sql。 这样,在我执行svn更新后,我只需要运行我的sql文件(mysql db_name -p -u username <dbupdates / rev74.sql),我很高兴。

如果你想用它来获得真正的时髦,你可以使用构建脚本从SVN获取当前版本,然后编译 PHP代码,然后在成功构建时自动将更改推送到服务器。

这将有助于调试,并可能使您的代码运行得更快。 此外,进入构建习惯确实改进了我的编码,只需将PHP直接推送到服务器并通过Firefox进行调试。

源代码控制的好处表现为项目的复杂性和开发人员数量的增加。 如果您直接在远程服务器上工作,并且大多数时间只进行快速补丁,那么源代码控制可能不值得为您付出代价。

您最好使用存储库的本地工作副本(这意味着您还应该设置本地服务器)。 使用SVN作为更新它的唯一方法来对抗远程服务器会使您的速度大大降低。 话虽如此,使用SVN(或任何其他源代码控制)从长远来看将产生许多好处 - 您有完整的更改历史记录,您始终可以确保服务器是最新的(如果您运行更新)如果您向项目中添加更多开发人员,则可以避免相互之间造成代价高昂的源代码覆盖。

我在工作中做的是使用FTP将更改上传到测试服务器。 然后当我完成我正在处理的网站部分时,我提交更改并更新两者。 有时,如果我正在处理某些事情并且我在不同的目录中更改了很多文件,我会提交它并更新测试服务器。 但我不更新生产服务器。 但我是这里唯一的程序员,如果有多个程序员,我不建议提交可能有错误的代码。

我使用ZendStudio for Eclipse(目前版本为6.1)。 我使用SVN保持我的源代码可用。 最初我认为由于提交过程(并输入提交注释)并等到它停止,该过程有点慢。

但是在得知Ctrl + Alt + C提交并检查“始终在后台运行”之后,该过程根本不会变慢。

另外,我确实在本地运行所有内容,然后在一段时间后只运行SSH。

我做了一个post-commit钩子来自动更新我的网站。 它很快但你可以犯错误。

如果在* nix服务器上并且您具有适当的SSH访问权限并且您有足够的空间来保留网站的多个副本, 那么我发现的最有用的版本控制技术是使用符号链接指向“当前”版本的网站。 (您仍然可以使用SVN来版本化源代码 - 这是一种在服务器上轻松/即时切换网站版本的方法。)

  1. 设置Web服务器以指向/whatever.com作为网站的根目录。

  2. 有一个像/ website / r1v00这样的文件夹,你将FTP网站文件,然后创建一个名为“whatever.com”的符号链接,指向/ website / r1v00

  3. 当您拥有该网站的更新版本时,创建另一个名为/ website / r1v001的文件夹,FTP更新站点的所有文件,然后将“whatever.com”的符号链接更改为现在指向/ website / r1v01。 如果新网站有任何问题,您可以通过简单地将“whatever.com”符号链接指向/ website / r1v00立即将其备份

当然,您可以/应该设置脚本来自动创建和切换符号链接。 在我的例子中,我有一个用PHP编写的“管理员”页面,列出了所有可用的版本,并允许我切换到其中任何一个。 这种技术已经多次保存了我的培根......!

显然,这并未解决版本控制数据库模式或数据库内容的任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM