【问题标题】:What's the best way to use SVN to version control a PHP site?使用 SVN 对 PHP 站点进行版本控制的最佳方法是什么?
【发布时间】:2010-09-12 03:32:37
【问题描述】:

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

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

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

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

【问题讨论】:

  • 诸如此类的问题让我爱上了这个网站。我有完全相同的问题,谷歌在我最喜欢的网站上找到了答案:)

标签: php svn


【解决方案1】:

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

【讨论】:

  • 不,这是个坏主意。您的部署需要一键式;仅使用 FTP,您将无需设置数据库后端。
  • 对于咨询工作,这是一个完全可以接受的解决方案。
【解决方案2】:

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

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

这不是很合适,但快速且相当可靠。

【讨论】:

    【解决方案3】:

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

    虽然这听起来像是很多工作,但实际上并非如此,从长远来看,顺利部署过程的好处将超过其自身的回报。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

          • @Qchmqs 没有人这样做。但是添加编译步骤可以让您有机会在将其推送到服务器之前进行自动化测试和错误检测。
          • 还是没搞懂,为什么要编译php??
          【解决方案7】:

          随着项目的复杂性和开发人员数量的增加,源代码控制的好处就会显现出来。如果您直接在远程服务器上工作,并且大部分时间只制作快速补丁,那么源代码控制可能不值得您付出努力。

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

          【讨论】:

            【解决方案8】:

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

            但是在得知 Ctrl+Alt+C 提交并选中“始终在后台运行”后,该过程一点也不慢。

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

            【讨论】:

              【解决方案9】:

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

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

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

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

              【讨论】:

                【解决方案10】:

                我做了一个提交后挂钩来自动更新我的网站。它很快,但你可能会犯错误。

                【讨论】:

                  【解决方案11】:

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

                  【讨论】:

                    【解决方案12】:

                    如果在 *nix 服务器上并且您有适当的 SSH 访问权限并且您有空间保存网站的多个副本,那么我发现的最有用的版本控制技术是使用符号链接指向网站的“当前”版本。 (您仍然可以使用 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 编写的“管理”页面,其中列出了所有可用的版本,并允许我切换到其中的任何一个。这种技术救了我好几次培根……!

                    显然,这并不能解决版本控制数据库架构或数据库内容的任何问题。

                    【讨论】:

                    • 这不是一个优雅的解决方案,它完全是蛮力 =/
                    猜你喜欢
                    • 1970-01-01
                    • 2022-11-10
                    • 1970-01-01
                    • 2018-11-23
                    • 2011-07-01
                    • 2010-09-09
                    • 2011-01-02
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多