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

时间:2008-09-22 20:05:56

标签: php svn

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

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

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

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

12 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:3)

我建议您继续使用Subversion来跟踪所有更改,甚至错误修复。如果要部署到生产服务器,则应使用SSH并调用svn update。此过程可以使用Capistrano自动执行,这意味着您可以坐在本地方框中并致电cap deploy - Capistrano将通过SSH连接到您的服务器并执行Subversion更新。节省了大量繁琐的手工劳动。

答案 3 :(得分:2)

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

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

这不是很合适,但很快且非常可靠。

答案 4 :(得分:1)

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

虽然这听起来像是很多工作,但实际上并非如此,从长远来看,顺利部署过程的好处不仅仅是为自己付出代价。

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

* nix服务器上

IF AND 您拥有相应的SSH访问权限 AND ,您有足够的空间来保留网站的多个副本,< strong> THEN 我发现的最有用的版本控制技术是使用符号链接指向网站的“当前”版本。 (您仍然可以使用SVN来版本化源代码 - 这是一种在服务器上轻松/即时切换网站版本的方法。)

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

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

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

  4. 立即将其退出。

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

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