跳转到主要内容

使用 Subversion

SVN,即 Subversion,是一个类似于 Git 的版本控制系统。它可以通过命令行或众多 GUI 应用程序之一使用,例如Tortoise SVNSmartSVN等。如果您是 SVN 新手,我们建议您先对 SVN 客户端进行比较,然后再决定哪一个最适合您。

本文档并不是对使用 SVN 的完整而有力的解释,而更像是开始使用 WordPress.org 上的插件的快速入门指南。有关更全面的文档,请参阅SVN 书籍

我们将在这里描述一些有关使用 SVN 的基础知识,因为它与 WordPress.org 托管相关。SVN 和几乎所有代码存储库服务的基本概念保持不变。

有关更多信息,请参阅以下文档:

警告:SVN 和插件目录是发布存储库。与 Git 不同,您不应该提交每一个小的更改,因为这样做会降低性能。请仅将完成的更改推送到您的 SVN 存储库。

概述

您的所有文件将集中存储在我们服务器上的svn 存储库中。从该存储库中,任何人都可以插件文件的副本签入到其本地计算机上,但是,作为插件作者,只有您有权签. 这意味着您可以更改本地计算机上的文件、添加新文件和删除文件,并将这些更改上传回中央服务器。正是这个签入过程更新了存储库中的文件以及 WordPress.org 插件目录中显示的信息。

Subversion 会跟踪所有这些更改,以便您可以在需要时返回并查看旧版本或修订版本。除了记住每个单独的修订之外,您还可以告诉 subversion 标记存储库的某些修订以方便参考。标签非常适合标记插件的不同版本,并且是确保在 WordPress.org 上看到正确版本并为用户更新的唯一完全受支持的方法。

你的帐户

您的 SVN 帐户将与您提交插件时使用的帐户的用户名(而不是电子邮件)相同。这也是您用于 WordPress 论坛的用户 ID。

请记住,大小写很重要- 如果您的用户名是 JaneDoe,那么您必须使用大写 J 和 D,否则 SVN 将失败。您可以在以下位置查看您姓名的具体大小写: https://profiles.wordpress.org/me/profile/edit/group/1/

如果您需要重置密码,请访问login.wordpress.org

SVN 文件夹

所有 SVN 存储库中默认创建三个目录。


/assets/
/tags/
/trunk/

默认情况下不再创建 /branches/ 目录,因为它未被使用。

树干

警告:不要将插件文件放在 trunk 的子文件夹中,否则/trunk/my-plugin/my-plugin.php 会中断下载。您可以使用包含文件的子文件夹。

/trunk目录是您的插件代码所在的位置。trunk可以被认为是最新最好的代码,但这不一定是最新的稳定代码。Trunk 用于开发版本。希望主干中的代码应该始终是工作代码,但它可能会不时出现错误,因为它不一定是“稳定”版本。对于简单的插件,主干可能是唯一存在的代码版本,这也很好。

即使您在其他地方(例如 git 存储库)进行开发工作,我们也建议您使 trunk 文件夹与您的代码保持最新,以便于 SVN 进行比较。

标签

/tags目录是放置插件版本的位置。您将为此处的子目录使用与插件版本控制相同的版本号。重要的是,您始终使用标签文件夹和正确的版本控制,以确保您的用户获得正确的代码。

该插件的 1.0 版将在 中/tags/1.0,1.1 版将在 中/tags/1.1,依此类推。

我们强烈鼓励使用语义软件版本控制

资产

笔记:另请参阅:您的插件资产如何工作

资产是您的屏幕截图、标题图像和插件图标所在的位置。该目录中的一些较旧的插件可能在 /trunk 中具有屏幕截图文件,但不建议这样做。所有新插件都应将其屏幕截图放在 /assets 中。这可以使插件的文件大小保持较小,因为无需将屏幕截图与插件本身一起发送到 WordPress 安装。

分支机构

默认情况下不再创建 /branches/ 目录,因为它基本上未被使用。本节可被视为已弃用,仅供参考。

/branches目录是您可以用来存储插件分支的地方。也许是正在开发的版本,或者测试代码等。

WordPress.org 系统根本使用分支目录做任何事情,它被认为是严格供开发人员根据需要使用的。由于默认情况下不再创建它,因此您可以忽略它,因为您不再需要它。

最佳实践

为了使您的代码最容易被其他开发人员访问,以下实践被认为是最佳的。

不要使用SVN进行开发

这常常令人困惑。与 GitHub 不同,SVN 是一个发布系统,而不是开发系统。您不需要提交并推动每一个小的更改,事实上这样做对系统有害。每次您将代码推送到 SVN 时,它都会为 SVN 中的所有版本重建所有zip 文件。这就是为什么有时您的插件更新长达 6 小时才显示的原因。相反,当你准备好时,你应该推一次。

使用 trunk 文件夹来获取代码

许多人用作trunk占位符。虽然可以简单地更新readme.txt主干中的文件并将所有内容放入标记文件夹中,但这样做会使比较代码中的任何更改变得更加困难。相反,主干应该包含最新版本的代码,即使该版本是测试版。

始终标记版本

虽然可以使用 trunk 作为插件的稳定标签,但实际上不支持也不推荐此功能。相反,版本应该被正确标记为迭代。这将确保与任何自动更新程序完全兼容,并允许在代码出现问题时进行回滚。

从主干创建标签

您不应将代码直接推送到标签文件夹,而应该在主干中编辑代码,在自述文件中填写稳定版本,然后将代码从主干复制到新标签。

这不仅可以让您更容易地看到任何更改,而且您可以进行更小的提交,因为 SVN 只会更新更改的代码。这将节省您的时间并减少潜在的错误(例如更新到错误的稳定标签并将错误代码推送给用户)。

不用担心标签文件夹暂时不存在。您可以使用svn cp复制 trunk 到标签,然后同时将它们推送到 SVN。

如果您在本地操作,那么您可以一次性更新主干并从中创建标签。检查存储库的根目录,更新 /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”表示“添加”)。

要添加代码,请导航到my-local-dir 文件夹:$ cd my-local-dir

trunk/现在,您可以通过命令行使用复制/粘贴命令或拖放将文件添加到存储库本地副本的目录中。无论你觉得舒服什么。

警告:不要将插件文件放在 trunk 的子文件夹中,否则/trunk/my-plugin/my-plugin.php 会中断下载。您可以使用包含文件的子文件夹。

一旦您的文件位于 trunk 文件夹中,您必须让 subversion 知道您想要将这些新文件添加回中央存储库。


$ cd my-local-dir
my-local-dir/ $ svn add trunk/*
> A trunk/my-plugin.php
> A trunk/readme.txt

添加所有文件后,您将把更改检入中央存储库。


my-local-dir/ $ svn ci -m 'Adding first version of my plugin'
> Adding trunk/my-plugin.php
> Adding trunk/readme.txt
> Transmitting file data .
> Committed revision 11326.

所有签入都需要包含提交消息。

如果提交因“禁止访问”而失败,并且您知道自己具有提交访问权限,请将您的用户名和密码添加到签入命令中。


my-local-dir/ $ svn ci -m 'Adding first version of my plugin' --username your_username --password your_password

请记住您的用户名区分大小写

编辑现有文件

一旦您的插件位于目录中,您可能需要在某个时候编辑代码。

首先进入存储库的本地副本并确保它是最新的。


$ cd my-local-dir/
my-local-dir/ $ svn up
> At revision 11326.

在上面的例子中,我们都是最新的。如果中央存储库中有更改,它们将被下载并合并到您的本地副本中。

现在您可以使用您喜欢的任何编辑器编辑需要更改的文件。

如果您不使用 SVN GUI 工具(如 SubVersion 或 Coda),您仍然可以在进行更改后检查并查看本地副本和中央存储库之间有什么不同。首先我们检查本地副本的状态:


my-local-dir/ $ svn stat
> M trunk/my-plugin.php

这告诉我们,我们的本地副本trunk/my-plugin.php与我们从中央存储库下载的副本不同(“M”代表“修改”)。

让我们看看该文件到底发生了什么变化,这样我们就可以检查它并确保一切看起来正确。


my-local-dir/ $ svn diff
> * What comes out is essentially the result of a
  * standard `diff -u` between your local copy and the
  * original copy you downloaded.

如果一切看起来都不错,那么就可以将这些更改签入中央存储库了。


my-local-dir/ $ 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.

现在你已经成功更新了主干。

“标记”新版本

每次正式发布插件时,都应该标记该版本代码的副本。这可以让您的用户轻松获取最新(或较旧)版本,让您更轻松地跟踪更改,并让 WordPress.org 插件目录知道应该告诉人们下载哪个版本的插件。

首先将代码复制到该tags/目录的子目录中。为了 WordPress.org 插件浏览器的缘故,新的子目录应该始终看起来像版本号。2.0.1.3很好。Cool hotness tag糟糕

我们希望使用svn cp而不是常规的cp,以便利用 SVN 的功能。


my-local-dir/ $ svn cp trunk tags/2.0
> A tags/2.0

与往常一样,检查更改。


my-local-dir/ $ 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.

标记新版本时,请记住将字段更新Stable Tagtrunk/readme.txt版本。

恭喜!您已更新代码!

笔记

不要在 SVN 中放入任何您不愿意且不准备部署给使用您插件的每个人的内容。这 包括供应商文件.gitignore 和其他所有内容。

您也不应该上传 zip 文件。与大多数代码存储库系统一样,SVN 希望您上传单个文件。

也可以看看