如何使用git构建WP网站项目并从WP仪表板更新?


13

数月以来,我一直在尝试计划一个好的项目结构,以便将git版本控制用于WordPress网站开发,而不会牺牲通过WP仪表板更新核心和插件的能力,不需要非常规的目录结构(wp -WP父文件夹之外的内容),并且易于管理和部署整个网站。我已经读过有关子模块,子树,嵌套存储库等的信息,但我仍然很难将它们全部组合在一起并选择正确的策略。

这就是我现在正在考虑的内容,以及有关如何处理括号中的git repos的想法。

root (main project repo)
|-- wordpress (public git repo added as subtree)
|    |-- wp-content 
|    |    |-- plugins
|    |    |    |-- my-custom-plugin (git repo added as subtree)
|    |    |    |-- other-plugin-with-git-repo  (git repo added as subtree)
|    |    |    +-- other-plugin-without-git-repo (ignored/untracked)
|    |    |-- themes
|    |    |    |-- my-custom-theme (git repo added as subtree)
|    |    |    |-- other-theme-with-git-repo  (git repo added as subtree)
|    |    |    +-- other-theme-without-git-repo (ignored/untracked)
|    |    +-- uploads (ignored/untracked)
|    |-- wp-admin
|    +-- wp-includes
|-- wp-config.php (ignored/untracked)
+-- other-files.txt

这给我带来了一些问题/疑问;

  • 自动更新; 我喜欢这项新的自动更新功能,它可以节省大量时间和精力来保持我的网站的更新和安全,但是似乎它在跟踪git的代码更改方面投入了精力。有什么方法可以跟踪我的代码更改,同时仍然允许WordPress核心自动更新?

  • 在WordPress核心存储库下拥有子树是否会阻止我使用git合并到新的核心更新中,或者阻止我将更改推回WordPress核心存储库(如果我决定要成为核心贡献者)?

  • 对于没有公共git repo的插件,完全忽略它们会产生以下问题:无法在没有手动将文件复制到服务器的情况下快速克隆新服务器上的整个站点。如果我想对该插件的代码进行更改,也会引起问题,这些更改不会被跟踪,并且很容易在插件升级中丢失。

因此,总而言之,如何避免这些问题的git + WordPress设置良好?感谢您对我提议的项目结构的反馈。您可以通过任何方式帮助我改善此状况,我们将不胜感激!

PS,如果有更好的论坛进行讨论,请指向我。

Answers:


6

从我的角度来看,您的计划有两个问题-Git和“常规”结构。所以基本上一切。:)

  1. 对于整个站点堆栈,Git(通常是版本控制)是一个较差的工具。到那儿去,做了那件事,感觉很痛。

  2. 一段时间以来,对于任何严肃的网站来说,您都将内容与核心分开的所谓“非常规”结构是非常常规且可靠的选择。

  3. 几乎没有交钥匙方式将整个网站堆栈与本机更新结合在一起。它只是不能很好地配合,因为它试图在不同级别的项目中实现不同的目标(开发人员控制与最终用户控制)。

如果您问我整个站点WordPress堆栈的最佳选择是Composer,但是观点可能会引起注意。:)

关于您的特定问题:

  1. 如上所述,本机更新(更多的是自动更新)在严格控制的堆栈中不能很好地发挥作用。

  2. WordPress核心不是在Git中开发的,也不接受请求请求,所有贡献(到目前为止)都是通过补丁文件传递给Subversion的。

  3. 您可能必须将此类插件提交到您的仓库中。或采用其他方法(例如Composer)。


WordPress不使用Git进行开发,但是github.com/WordPress/WordPress上有一个镜像(每15分钟从SVN同步一次)。这并不是为了推送补丁程序,而是因为您肯定需要使用SVN&Trac。我不知道这是否适合OP的目的,但出于完整性考虑,它存在。
Pat J

@PatJ好点,我认为Q意味着要使用那个,但可能不是
Rarst 2013年

非常好点。我已经使用git和子模块建立了一个完整的网站堆栈,这是一个很大的麻烦。我想我想知道是否还有一种不受严格控制的方法来仍然利用Git,但又要利用本机更新来节省一些麻烦。我目前是一个单人团队,因此我基本上只是想尽可能高效地设置网站。
乔西亚·斯普拉格

@JosiahSprague如果您的主要痛点是初始设置(而不是长期的堆栈维护),则可以使用自定义install.php例程或某些东西专注于此并从那里使用正常的更新机制,这可能是有意义的。Composer堆栈可以很好地抽象处理更新,但是它依赖于您使用的软件包的质量,并且代理正式的WP存储库之类的事情还很不成熟。
腊斯特2014年

3

您可能会看看这个问题和这个问题。

还可以查看每个仓库中的README文件:

基于上述存储库,作为Git / WP设置的另一个示例,我创建了this。我选择对主题使用符号链接(我尝试在README中进行介绍)。

我有点喜欢自动更新,但是……我的计划是在更新发生时手动更新WP子模块​​。我认为替代方案是,从理论上讲(我尚未进行自我测试),让子模块自行更新以进行次要更新(为此进行WP设置),然后git在主要更新出现时对子模块进行强制/重置(也许这里的答案之一可能会有所帮助...当然,我认为,当更新到下一个主要版本时,可能要针对特定​​的WP标签。

要注意的一件事是,如果WP .git在路径中看到,它将自动关闭自动更新。有关更多信息,请参见:

为了启用自动更新,有一些简单的要求:

  • 如果安装使用FTP进行更新(并提示输入凭据),则会禁用自动更新
  • 如果安装以SVN或GIT签出方式运行,则禁用自动更新
  • 如果定义了常数DISALLOW_FILE_MODSAUTOMATIC_UPDATER_DISABLED,则禁用自动更新
  • 如果常量WP_AUTO_UPDATE_CORE定义为false,则禁用自动更新
  • 您的WordPress安装还需要能够通过HTTPS连接与WordPress.org联系,因此您的PHP安装也需要OpenSSL已安装并可以正常工作
  • Wp-Cron 需要运行,如果由于某些原因cron无法为您安装,自动更新也将不可用

其他相关链接:

2015年5月更新

我创建了此存储库,这是启动WordPress项目的快速方法。我最新的方法是仅对主题进行版本控制。换句话说,我在本地安装WP(使用上述仓库中的安装程序),然后在生产环境中安装WP,然后在每个系统上修改配置文件并git提取主题以获取功能站点。


2

这种类型的开发属于“不是那么容易,需要一个可能需要很长时间才能满足要求的自定义工作流程”。

我发现子树,子模块或嵌套的存储库,实在是太难了。

一些想法(跟踪所有内容)。

  1. 使用以下命令启用git / svn的自动更新:
    add_filter( 'auto_upgrade_ignore_checkout_status', '__return_true' );

通过手动提交+电子邮件的安全方法:

您可以使用登台服务器并通过电子邮件将更新通知发送给自己,提交更新并推送到已关闭自动更新的实时服务器。

这也使您可以随意为自己的存储库复制/粘贴文件夹,这是我经常这样做的方式。它还使克隆/销毁多个登台服务器变得容易,由于此方法是分布式的,因此git确实对这种方法生效。

缺点:复制/粘贴文件夹,管理。

自动方式

设置构建脚本(Phing,Ant,Bash,Capistrano等)和一些自定义代码,这些代码将在应用更新时执行git add + commit并将其发送到实时服务器。您还可以将插件/主题存储库分开,然后使脚本进行编译/移动/随便什么,和/或在组合中使用Composer。

像这样自动化工作流程也往往不够灵活,只有在您真正意识到需要投入时间的情况下才值得这样做。

缺点:不灵活,需要花费时间来创建。

Git不应用于备份,通常来说,您无需克隆WP的提交历史记录。


0

经过一番思考之后,由于我绝对想利用本机WP更新来节省自己的工作量,因此使用git跟踪WP将更新的任何内容都没有意义。这是一个经过修改的想法。

root (main project repo)
|-- wordpress (ignored/untracked)
|    |-- wp-content 
|    |    |-- plugins
|    |    |    |-- my-custom-plugin (git repo not connected to parent)
|    |    |    |-- other-plugin (ignored/untracked)
|    |    |    +-- modified-plugin (unignored, added to main project repo)
|    |    |-- themes
|    |    |    |-- my-custom-theme (git repo not connected to parent)
|    |    |    |-- other-theme (ignored/untracked)
|    |    |    +-- modified-theme (unignored, added to main project repo)
|    |    +-- uploads (ignored/untracked)
|    |-- wp-admin
|    +-- wp-includes
|-- wp-config.php (ignored/untracked)
+-- other-files.txt

当然,然后我就失去了从VCS跟踪哪些插件和主题是项目的一部分的能力,但是我实际上只需要备份和主题用于备份,并且无论如何我都会使用某种常规备份系统。

因此,我真正想要的唯一缺少的是能够轻松地将整个堆栈部署到不同的服务器而无需使用FTP手动复制整个内容的能力。有人对此有任何想法吗?


0

好的,在这里观看Mark Jaquith的讲话,也许我走错了路。这是跟踪所有内容的另一种方式。

   root (main project repo)
    |-- wordpress (repo as subtree)
    |-- wp-config.php (ignored/untracked)
    |-- wp-content 
    |    |-- plugins
    |    |    |-- my-custom-plugin (repo as subtree)
    |    |    |-- other-plugin-with-git-repo (repo as subtree)
    |    |    +-- plugin-without-git-repo
    |    |-- themes
    |    |    |-- my-custom-theme (repo as subtree)
    |    |    |-- other-theme-with-git-repo (repo as subtree)
    |    |    +-- theme-without-git-repo
    |    +-- uploads (ignored/untracked)
    +-- other-files.txt

我猜这主要的缺点是有一个自定义的内容目录,过去这对我造成了麻烦,因为插件和主题编写得不好,无法找到内容目录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.