使用 SVN

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

本文档_不是_关于使用 SVN 的完整而有力的解释,而是更多关于 WordPress.org 插件入门的快速入门。有关更全面的文档,请参阅The SVN Book。

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

有关其他信息,请参阅以下文档:

  • readme.txt 的工作原理
  • 插件资产(标题图像和图标)如何工作

警告: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/ 目录不再默认创建,因为它未被使用。

  • 用于屏幕assets 截图、插件标题和插件图标。
  • 开发工作属于trunk.
  • 发布进去tags
  • 不同的代码分支进入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 系统根本**不使用 branches 目录,它被认为严格供开发人员在需要时使用。**由于它不再默认创建,您可以忽略它,因为您不再需要它。

最佳实践

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

不要使用 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 希望您上传单个文件。

也可以看看

  • readme.txt 的工作原理
  • 插件资产(标题图像和图标)如何工作
  • SVN 书