Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Joomla中使用源代码管理,同时允许用户继续在生产服务器上进行内容更改?_Php_Git_Svn_Version Control_Joomla - Fatal编程技术网

Php 如何在Joomla中使用源代码管理,同时允许用户继续在生产服务器上进行内容更改?

Php 如何在Joomla中使用源代码管理,同时允许用户继续在生产服务器上进行内容更改?,php,git,svn,version-control,joomla,Php,Git,Svn,Version Control,Joomla,场景: 我的团队为我们的客户管理多个Joomla网站。当我们管理网站的开发/托管时,客户会进行所有内容更新(创建文章、内容、上传图像等) 我们在以下标准配置中运行这些网站 开发服务器 登台服务器 生产服务器 客户端(每天)对生产服务器进行所有内容更新。另外两台服务器主要用于新的开发和测试 我们目前正在使用BitBucket作为这些网站的SVN(我们才刚刚开始)。目前,与网站相关的所有文件都存储在回购协议中 问题 根据我们当前的设置,如果开发人员对开发环境进行了更改,然后将该更改集推送到生产环

场景:

我的团队为我们的客户管理多个Joomla网站。当我们管理网站的开发/托管时,客户会进行所有内容更新(创建文章、内容、上传图像等)

我们在以下标准配置中运行这些网站

  • 开发服务器
  • 登台服务器
  • 生产服务器
客户端(每天)对生产服务器进行所有内容更新。另外两台服务器主要用于新的开发和测试

我们目前正在使用BitBucket作为这些网站的SVN(我们才刚刚开始)。目前,与网站相关的所有文件都存储在回购协议中

问题

根据我们当前的设置,如果开发人员对开发环境进行了更改,然后将该更改集推送到生产环境中,我们最终会覆盖客户机在生产环境中进行的所有内容更新

我的问题


我们如何成功地利用源代码管理系统,并保持灵活性,使我们的客户能够继续直接在生产服务器上进行更新,而不必强迫他们在开发、登台和生产上进行内容更改?

有些事情不应该在版本控制中

一般来说,源代码应该进行版本控制,而数据不应该进行版本控制。我不熟悉Joomla,但是任何类型的“上传内容”目录都应该在版本控制系统的忽略文件中。这样,您就可以将更改部署到软件中,而不用担心数据被覆盖


当然,您的数据应该定期备份,但这不是版本控制的目的。

当您简要描述您的工作流程时,有一些事情需要考虑。没有一般规则,但请研究以下建议:

  • 将您开发的扩展(模板、组件、插件等)放入版本控制中。无论如何,定制是您添加到Joomla的唯一内容。希望没有核心黑客。或者,如果确实要对整个安装进行版本设置,则至少应忽略客户端/您更改的媒体文件夹。我认为没有必要将整个Joomla站点置于版本控制之下

  • 我想您的客户机实际上并没有更改PHP脚本,只是更改媒体文件和数据库条目。您应该只推动生产代码和/或数据库架构更改

  • 如果您依赖于提交-推送到FTP功能,或者手动推送文件,我建议您考虑构建一个可分发的更改版本,该版本采用可通过扩展管理器部署的包的形式。使用Phing之类的工具,只需单击一下即可完成构建包。例如,如果您对模板进行了一些更改,创建新的模板版本,创建包并首先更新登台服务器/测试服务器,如果一切顺利,则更新生产

如果您有

  • 测试网站更改(布局、新功能、新css)的暂存服务器
  • 用户发布新内容的生产服务器
您需要部分数据库更新和文件同步

数据库非常困难,因为资产表可能会受到暂存服务器上的配置更改和生产服务器上的新内容的影响;对于这个和任何其他共享表,我们通过确保ID在更新后不会立即冲突来解决这个问题,从而留下足够的间隙


尽管——引用大多数其他答案——修订控制既不用于数据也不用于数据库,但它确实非常好,特别是使用提交前和提交后挂钩来执行所需的数据库操作;不过,从rsync rdiff到phing再到ant-maven的任何脚本/发布工具都可以

谢谢!我认为这是正确的方法。我们将配置我们的流程,以便只有实际的“源代码”文件包含在源代码管理流程中。如果数据库中有内容更改,为什么要替换数据库?