使用SVN让WordPress升级时合并定制的更改

因为实在是受不了阿里云每天推送wordpress有各种漏洞,决定还是尽量把wordpress升到最新版本。但个人对wordpress的代码进行过多处的修改(例如文章id复用、评论模板、主题修改等),直接升级就会被覆盖掉。所以决定引入版本管理。

服务器上直接安装TortoiseSVN,安装时建议选中命令行工具,这样就可以直接用svnserve开服务从远程连接,无需再安装VirtualSVN。

先考虑一下我们的逻辑。我的blog最后一次手动更新的版本是4.2.1,当前最新的版本为4.7.3。通常来说的逻辑应该是将当前正在跑的版本与4.2.1比对得出我自己修改过的差异,然后覆盖安装4.7.3,最后把我修改过的差异打到新版本上。方法就是先来diff一下生成patch文件,然后直接升级,最后来应用patch。

不过我们可以从反方向的角度来考虑这个问题,即将我自己修改的网站看作trunk,将wordpress官方4.2.1到4.7.3的(大范围的)更改看作分支,将这个修改集合并到我这边的主干上。这样考虑就可以很方便地用svn来进行了。以下为参考步骤。

1、创建一个仓库。建立一个/trunk/main,用于存放当前的网站。
2、建立一个/vendor/wordpress/current,下载4.2.1解压进去,提交。
3、svn复制current里的所有文件到main,更新工作集。
4、服务器上checkout当前的main,但不覆盖现有的文件,这样直接提交,将网站上的内容覆盖到main,这样main里就有了我修改过的内容。
5、删除current里的所有文件,下载4.7.3解压进去,执行一下添加所有文件,提交(乌龟会检查需要删除的文件,但未版本的文件要手动添加),这样current就滚到了最新。
6、到main里执行merge。merge来源为current,合并范围为从第2步之后current的rev,到head。这之后main就刷到了4.7.3,并且保留了我自己的更改。可能会有部分文件冲突需要手工合并。然后提交。
7、服务器上update最新的main。浏览器访问wp-admin升级数据库。

以后再遇到更新时,就直接将新版本替换到current里,然后将更改合并到main里。想方便的话还可以做个钩子让提交时服务器自动update。

20171129 4.7.3 to 4.9记录:
1、checkout current,下载4.9解压进去,执行添加所有文件(结果刚才忘了,合并后wordpress少文件打不开了),commit。
2、直接拿iis目录当working目录执行merge,来源为current,范围写current上一次的rev(刚刚commit之前的rev)到head。因为上次搞乱了line ending,选上忽略换行符合并。
3、合并顺利完成,访问正常,提交trunk。

参考文献:http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html

One Reply to “使用SVN让WordPress升级时合并定制的更改”

Leave a Reply

Your email address will not be published. Required fields are marked *