如何在不破坏Subversion存储库的情况下,允许使用图形用户界面更新插件?

时间:2012-04-24 作者:Tom Auger

WordPress安装的开发受Subversion版本控制。我们没有使用外部链接插件-插件是由负责内容的非开发人员安装/更新的。

这会导致存储库中出现问题,尤其是对于已经处于版本控制下并且刚刚更新到最新版本的插件,因为更新插件会删除目录(包括所有的.svn文件夹),然后重新创建它。

这是一个典型的场景,让我感到无尽的悲伤:

将现有WordPress站点置于新回购中的版本控制之下。此现有站点已经有一些插件。其中一些插件已经过期,现在,请进入管理员并更新这些插件运行svn st 您可以看到以下内容:

~加上这个

~wordpress的谷歌分析

这个词尤其令人讨厌,因为它的意思是“啊,我不知道发生了什么”,而SVN只是咯咯地笑。即使是复制、删除、删除、恢复、向后移动、尝试提交-不。

许多人建议使用svn:externals或手动FTPing更新,这一切都很好,但我只是希望能够按照上帝的意愿使用UI。从我在core中看到的情况来看,没有任何钩子可以用来说服WP不要删除文件夹,或者。svn文件夹。有什么可以做的吗?

4 个回复
最合适的回答,由SO网友:Otto 整理而成

真正的答案,考虑到以上所有因素:

关于.svn 目录:Subversion 1.7于一年多前发布(http://svn.haxx.se/dev/archive-2011-10/0152.shtml ) 工作副本不再包含。每个文件夹中的svn目录。它们包含一个。根目录中的svn目录,以及相当可观的性能改进。如今,SVN已升级到1.7.7版。您应该升级svn客户端,以消除任何类型的问题。

这回答了最初的问题,因为WP删除目录并重新创建它们不再是一个真正的问题。它不会弄乱Subversion 1.7或更高版本制作的工作副本。然而,它并没有回答关于生产部署和开发/测试环境的更大的存储库管理问题。

基本上,如何管理生产机器取决于您。如果您实际拥有一个真正的“生产”环境,那么您应该使用权限方案和/或插件来禁用用户直接升级系统的能力。用户无法更改生产。这就是所谓“生产”的意义所在。这种情况下的更改将由开发人员进行,并首先通过测试和/或QA系统进行。如果您有这样的环境,并且确实需要这种级别的控制,那么完全禁用升级程序将是首选方法。

见鬼,我自己也使用这种环境,尽管我一直控制着开发、测试和生产。整个网站处于SVN回购中。其中一些确实使用了externals(我使用WP-trunk,一些插件作为trunk版本使用),一些没有,并且是repo的本地版本。对我来说,部署生产更改意味着svn up 基本上是在那些盒子上。不能直接在这些框文件系统上进行更改。

另一方面,一些我直接运行的站点是实时的,有定期备份。如果我的个人网站有点不稳定,那么它对我没有任何影响。我在这些上使用WP更新程序很好。现在,我不是在回购中运行这些站点,我只是定期备份整个站点。事实上,我在个人网站上使用VaultPress,但任何备份方法都是一个好主意。这是一种不同类型的管理,我不需要开发/测试环境。

WordPress可以很好地与您希望围绕它创建的任何类型的系统配合使用,但该系统是WordPress的外部系统,您如何管理它不是WP的问题,而是您想要如何管理它的问题。

SO网友:Ralf912

尚未测试,但add_filter(\'upgrader_clear_destination\', array(&$this, \'delete_old_plugin\'), 10, 4); 看起来不错。你会在wp-admin/includes/class-wp-upgrader.php在更新插件之前删除过滤器。这可能有点棘手,因为您必须搜索要删除的正确函数名。Toscho wrote a post about removing anonymous hooks (german).

但是apply_filters(\'upgrader_pre_install\', true, $hook_extra); (与上述文件相同)似乎是更好的解决方案。挂接到“upgrader\\u pre\\u install”并保存。svn目录。还可以挂接到“upgrader\\u post\\u install”,此挂接将在更新后完成。更新插件后,只需复制回您的。svn目录。

SO网友:Ashfame

如果你想通过版本控制来管理你的WordPress安装,那么我看不出一种方法,那就是只从WordPress管理面板更新插件。

理想情况下,应如下所示:

在本地签出您的回购协议副本

  • 测试提交在生产中签出最新版本(签出意味着部署这些提交)
    • ,这在GIT中可以完美地工作。对于SVN,这可能是一个问题,因为它有.svn 每个目录中都有一个目录,但就像Otto建议的那样,SVN 1.7在这里可以帮助您,因为只有一个.svn 根目录中的目录。

    SO网友:Tom Auger

    似乎创建了一个插件来帮助实现这一点。

    http://plugins.svn.wordpress.org/svn-auto-upgrade/trunk/

    或者,只需在WP后端的插件浏览器中键入“SVN自动升级”。

    结束

    相关推荐

    Beta Versioning of Plugins

    当我为一些bug编写修复程序时,我通常会增加版本并将其发送给bug查找程序,以查看我的修复程序是否有效。如果我有1.2.5 我想创建一个测试版,一旦我提交代码,它将变得多余,我应该使用1.2.5-beta 或1.2.6-beta? 我担心的是1.2.6 <;1.2.6-beta 因此,字符串比较可能有利于beta版,而bug查找程序不会收到发布稳定版本的通知。编辑:如果在不考虑发布类型的情况下对字符串进行绝对比较,则可以使用1.2.5-fix 然后1.2.6. 该问题也概述在http://en.wik