WordPress插件目录:使用Subversion
SVN,即Subversion,是类似Git的版本控制系统。可以通过命令行使用,也可以使用众多GUI应用之一,例如Tortoise SVN、SmartSVN等。初次使用SVN时,建议先阅读SVN客户端比较,再选择适合自己的工具。
本文并非完整、详尽的SVN使用说明,而是帮助你开始在WordPress.org上维护插件的入门指南。更全面的文档请参阅《SVN Book》。
这里介绍与WordPress.org托管相关的一些SVN基础。SVN及几乎所有代码仓库服务的基本概念是相同的。
更多信息请阅读:
概览
所有文件会集中存储在WordPress.org服务器上的SVN仓库中。任何人都可以从仓库检出(check out)插件文件到自己的机器上;而作为插件作者,只有你具有提交(check in)的权限。这意味着你可以在本机修改文件、添加新文件、删除文件,然后将这些修改上传到中央服务器。提交过程会同时更新仓库中的文件与WordPress.org插件目录中显示的信息。
Subversion记录所有这些修改,因此将来需要时,可以回看旧版本或修订(revision)。除了记录各次修订,还可以让Subversion为仓库的特定修订添加标签(tag),便于引用。标签很适合标记插件的不同发布版本,也是确保WordPress.org显示正确版本、用户获得正确更新的唯一完全受支持方式。
你的账号
SVN账号使用提交插件时所用账号的同一个用户名,而不是电子邮件地址。这也是你在WordPress论坛使用的用户ID。
请记住,大小写很重要:若用户名是JaneDoe,就必须使用大写J和D,否则SVN会失败。可以在个人资料中查看用户名的准确大小写。
需要重置密码时,前往login.wordpress.org。
SVN文件夹
所有SVN仓库默认创建3个目录:
/assets/
/tags/
/trunk/
assets用于截图、插件页眉和插件图标。- 开发代码位于
trunk。 - 发布版本放在
tags中。
过去用于不同代码分支的/branches/目录因没有被使用,现在已不再默认创建。
Trunk
/trunk是存放插件代码的位置。可以将trunk看作最新代码,但不一定是最新的稳定代码。它用于开发版本。理想情况下,trunk中的代码应始终可以工作,但因为不一定是“稳定”版本,偶尔可能有问题。对于简单插件,trunk可能是唯一存在的代码版本,这也可以。
即使开发工作在其他地方完成,例如Git仓库,也建议让trunk文件夹中的代码保持更新,以便进行SVN比较。
Tags
/tags目录存放插件各版本。这里的子目录名称应与插件使用的版本号相同。始终使用标签文件夹和正确的版本编号,非常重要,能确保用户得到正确的代码。
插件1.0版放在/tags/1.0,1.1版放在/tags/1.1,依此类推。
强烈建议使用语义化版本编号。
Assets
Assets用于存放截图、页眉图片与插件图标。目录中的一些旧插件可能把截图放在/trunk,但不建议这样做。所有新插件都应将截图放在/assets。这样可以减小插件文件体积,因为没有必要将截图随插件本身发送到WordPress安装中。
Branches
/branches可用于存储插件分支,例如开发中的版本或测试代码。
WordPress.org系统完全不使用branches目录,它纯粹供开发者按需使用。由于不再默认创建,也不再需要它,你可以忽略这个目录。
最佳实践
为了让其他开发者最方便地理解和使用你的代码,推荐以下做法。
不要使用SVN进行开发
这一点常使人困惑。与GitHub不同,这里的SVN旨在作为发布系统,而非开发系统。不必为每一个小改动提交和推送;事实上,这样会损害系统性能。每次向SVN推送代码,系统都会重建SVN中所有版本的全部ZIP文件。这就是插件更新有时要等待长达6小时才能显示的原因。应该在准备就绪时一次推送。
用trunk文件夹存放代码
很多人只把trunk当作占位目录。虽然可以只更新trunk中的readme.txt,把其他内容全部放在标签文件夹中,但这样会使代码变更更难比较。trunk应包含最新版本的代码,即使该版本仍是beta。
始终为发布版本打标签
虽然可以将trunk用作插件的稳定标签,但这一功能实际上不受支持,也不推荐。发布版本应正确打标签并逐版更新,这能确保与自动更新程序完全兼容,在代码出现问题时也能回退。
从trunk创建标签
不要直接将代码推到标签文件夹;应先编辑trunk中的代码,在readme中设置稳定版本,然后将代码从trunk复制到新标签。
这样既方便查看变化,又能减小提交,因为SVN只更新有变化的代码。这会节省时间,减少潜在错误,例如更新到错误的稳定标签、将有问题的代码推送给用户。
不必担心标签文件夹短时间不存在。可以使用svn cp把trunk复制到标签,并将两者同时推送到SVN。
本地操作时,可以一次性更新trunk并从中创建标签。检出仓库根目录,更新/trunk中的文件,然后运行svn copy /trunk /tags/1.2.3(或其他版本号),再一次性提交全部内容。SVN以差异为基础;只要使用SVN执行复制,它就会保留历史,让其他人容易追踪。
删除旧版本
由于SVN是发布仓库,许多开发者会删除较旧、不再支持的插件版本。自2019年起,这样做不再加快发布,因为构建过程只处理文件发生变化的标签。
示例
开始一个新插件
要开始维护插件,需要将已有文件添加到新的SVN仓库。
首先在本机创建一个本地目录,用于存放SVN仓库副本:
mkdir my-local-dir
接下来,检出预先创建的仓库:
svn co https://plugins.svn.wordpress.org/your-plugin-name my-local-dir
> A my-local-dir/trunk
> A my-local-dir/branches
> A my-local-dir/tags
> Checked out revision 11325.
例子中的Subversion把中央SVN仓库的全部目录添加到了本地副本中,A表示“add”。
要添加代码,进入my-local-dir文件夹:
cd my-local-dir
现在可以通过命令行复制粘贴,或者拖放,把文件放进本地仓库副本的trunk/目录;选择自己习惯的方式即可。
文件放入trunk之后,必须通知Subversion:你希望把这些新文件添加回中央仓库。
cd my-local-dir
svn add trunk/*
> A trunk/my-plugin.php
> A trunk/readme.txt
添加全部文件后,把修改提交回中央仓库:
svn ci -m 'Adding first version of my plugin'
> Adding trunk/my-plugin.php
> Adding trunk/readme.txt
> Transmitting file data .
> Committed revision 11326.
每次提交都必须包含提交说明。
如果提交因“Access forbidden”失败,而你确定自己具有提交权限,可以在提交命令中加入用户名和密码:
svn ci -m 'Adding first version of my plugin' --username your_username --password your_password
请记住,用户名区分大小写。
编辑已有文件
插件进入目录之后,你很可能会在某个时候修改代码。
先进入仓库的本地副本,确保它是最新的:
cd my-local-dir/
svn up
> At revision 11326.
上例中本地副本已经最新。如果中央仓库有修改,这些修改会被下载并合并到本地副本。
现在可以使用喜欢的编辑器修改文件。
如果没有使用SVN GUI工具,例如SubVersion或Coda,在修改后仍可检查本地副本与中央仓库的差异。先检查本地副本的状态:
svn stat
> M trunk/my-plugin.php
它告诉我们本地trunk/my-plugin.php与下载的副本不同,M表示“modified”。
查看文件究竟发生了什么变化,以检查修改是否正确:
svn diff
> * What comes out is essentially the result of a
* standard `diff -u` between your local copy and the
* original copy you downloaded.
如果一切正常,就可以向中央仓库提交修改:
svn ci -m "fancy new feature: now you can foo *and* bar at the same time"
> Sending trunk/my-plugin.php
> Transmitting file data .
> Committed revision 11327.
现在,你已经成功更新trunk。
为新版本“打标签”
每次正式发布插件,都应为该版代码副本打标签。用户因此可以方便地取得最新或旧版本,你也更容易追踪变更,同时WordPress.org插件目录能够知道应告诉用户下载哪个版本。
首先将代码复制到tags/目录的子目录中。为方便WordPress.org插件浏览器使用,新的子目录名称应始终看起来像版本号。2.0.1.3是合适的,Cool hotness tag则不合适。
应使用svn cp,而非普通的cp,以利用SVN的功能:
svn cp trunk tags/2.0
> A tags/2.0
和往常一样,提交修改:
svn ci -m "tagging version 2.0"
> Adding tags/2.0
> Adding tags/2.0/my-plugin.php
> Adding tags/2.0/readme.txt
> Committed revision 11328.
为新版本打标签时,别忘了更新trunk/readme.txt中的Stable Tag字段,使其指向新版本。
恭喜,你已更新代码!
注意
不要把任何尚未准备好部署给所有插件用户的内容放进SVN。这包括vendor文件、.gitignore以及其他所有内容。
也绝不应上传ZIP文件。与大多数代码仓库系统相同,SVN期望上传各个独立文件。
另见
来源与许可
来源:WordPress Plugin Handbook:Using Subversion,WordPress插件手册贡献者。本版为中文翻译,命令与输出保留原文。官方仓库GPL第2版许可全文随来源文件保留。











暂无评论内容