7. 发布与更新自己的拓展吧#

到了这一步,想必你通过阅读教程或者直接参考现有代码,自己的拓展已经积累了不少内容了吧?既然如此,为何不分享出去让大家都看到呢?因此本节将介绍发布拓展的方法。

要发布拓展,步骤很简单:将拓展建立成Git仓库,并托管到Gitee等平台即可。这个对于经验充足的人而言非常简单,但对于连Git都没听说过的人还是有相当难度的——无妨,我们接下来慢慢的介绍就行。

7.1. 关于Git#

Git是众多版本控制工具之一。版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。大体上来说,他是使用一个本地数据库管理不同文件的各个版本。当然,作为初来乍到的新月杀拓展学习者,你只要知道Git是我们用来发布和更新拓展的工具就行啦。

如果你之前接触过太阳神三国杀拓展开发的话,你可能用这种方式管理和发布拓展:直接复制一份出来,把文件夹改成拓展包-X.X,这就是新版本;然后打个包并发到网上。这种方法固然简单直观,但也存在几个明显的问题:

  • 更新不便,每更新一下就要把整个拓展都重新下载一遍

  • 复制了太多文件夹出来,占了太多地方

  • 其他玩家更新拓展的时候操作不便

第一个问题往往是那些大体量拓展(>30MB左右)的痛点,因此拓展开发者后来又想出了“补丁更新”的形式——先让玩家下载某个版本安装着,自己更新接下来几个版本的时候,就只发一个小补丁,这样玩家的下载量就减轻了。但是这样一来,当版本更新了几次之后,补丁的制作难度也越来越大——文件太多太杂啦!

所以我们一开始制作新月杀的时候选择Git来更新拓展包就是为了解决以上的几个问题。只要你在游玩新月杀,就该体验到更新的便捷性了:每次进服务器都会先自动更新一下拓展包,然后就能加入了,只要不是第一次下载的话更新也用不了多长时间。而且开发者的操作也方便多了,从来不需要向群文件(或者诸如网盘之类的)里面发打包好的zip包。

事实上,这样的自动更新功能就是Git实现的。下面我们就来正式接触Git吧。

7.2. 安装Git#

前往https://git-scm.com/download/win下载git,下载64-bit Git for Windows Setup。这样应该会为您下载一个exe安装包。

考虑到官网的下载链接实际上指向github,而且可能连官网的都进不去,所以也可考虑https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/

Git的安装流程就是不断无脑的点下一步了,下一步下一步下一步……除了这里:

../../_images/6-1.jpg

修改默认编辑器为vscode#

这里默认会使用Vim,切记改成Visual Studio Code再点下一步!

在各种下一步之后,安装就完成了。在桌面上右键单击,如果右键菜单有Git bash here的话,就说明安装成功啦。

虽然网上流传着许许多多的Git图形化客户端,但是本文将只会介绍Git命令行的使用!这是因为只有在命令行模式下你才能执行Git的所有命令,而大多数的GUI软件为了降低难度,只会让你能执行一小部分操作。如果你学会了在命令行下如何操作,那么你在操作GUI软件时自然也不会遇到什么困难。但是反过来就不成立了。

点开Git bash here就是开启命令行了。什么你从来没接触过命令行?那么赶紧去看《新月杀新人入门》的第11章吧。虽然题目说的是Linux的使用,但是对Git bash是同样适用的!(除了Git bash不可以用apt命令)在Git bash里面对着那一章操练一下,熟悉命令行的基本操作以及几个基本命令(ls、pwd、cd、mv啥的)再来接着阅读后文吧。

备注

在Git bash中,所谓的“家目录”指的就是C:Users<你的用户名>。由于种种机缘巧合,Windows版的Git没有中文版,你得去学着看懂那些英文才行。

7.3. 初次运行Git#

熟悉了一下命令行的操作之后,我们便可以好好接触git本身了。

在随便某个文件管理器或者桌面右键->Git bash here就能打开终端了……下面我们来做一些初次运行的配置吧。我们的目标是发布拓展,也就是上传到Gitee中,所以我们需要先让Gitee知道我们这台电脑对应着自己的那个账号才行,不然git命令行不好操作啦。

备注

可能有些人会反感gitee,但对于发布拓展而言这似乎是为数不多的好选择了。你也可以发布到Github,如果你能保证所有游玩你拓展的人全都能顺利连上github的话。

好,开始吧,首先第一件事是告诉本机的git你是谁:

$ git config --global user.email "你的Git邮箱"
$ git config --global user.name "你的Git用户名"

这两行命令之后就告诉了git你自己的身份了。这里运行的程序名是git;参数1“config”表示要做的git操作类型是自定义配置,选项“--global”表示全局有效,参数3表示要配置的配置项,最后一个参数就是配置的值了。

接下来就是要告诉Gitee,自己这台电脑可以给自己的账户用了。Git采取的是SSH Key的认证策略,所以我们紧接着要来配置。

提示

SSH Key更具体一点是采用RSA加密来进行认证的。RSA加密是一种常见的非对称加密方式,你自己手上会有一个“公钥”和“私钥”,私钥自己保留,公钥可以告诉任何人。因为必须要知道私钥内容才能认为公钥有效,所以只要你手上有私钥,就起到认证身份的作用了。更多信息可以自己去网上查询到。

我们先在命令行中敲以下这些命令,来创建好自己的一对密钥:

$ ssh-keygen -t rsa -C "你注册用的邮箱地址" # 换成自己真正的邮箱
  # 出来一堆东西,一路点回车就是了
$ cat ~/.ssh/id_rsa.pub
  # 出来一堆乱七八糟的东西:ssh-rsa <一大堆乱七八糟的内容> <你的邮箱>

注意井号开头的表示注释;没错,命令行也可以写注释的,毕竟命令行本身也是一种脚本语言(我们用不到它的编程功能就是了)。总之输命令的时候无需输入井号之后的内容。

在命令cat ~/.ssh/id_rsa.pub中,出来的那一堆以ssh-rsa开头的输出,就是我们刚刚创建好的公钥。只要把公钥告诉gitee就能证明自己的身份了。

进入Gitee网页,然后如下操作:

  1. 点右上角你的头像,点账号设置

  2. 点左侧栏中 安全设置 - SSH公钥

  3. 此时弹出公钥添加界面,标题任选,下面公钥栏中,将刚刚生成的公钥复制粘贴上去

  4. 点确定

这样就配置好了ssh公钥。我们还是验证一下配置是否成功吧,使用命令:

$ ssh -T git@gitee.com
Hi xxxx! You've successfully authenticated, but GITEE.COM does not provide shell access.

输出像Hi xxx!这样的信息,就说明配置成功了。否则需要进一步检查自己的操作,上网查一下吧。

到这一步为止,你已经完成了git的初步配置,现在你已经有能力将拓展包发布出去了。

7.4. 为拓展包创建git仓库#

用文件管理器打开自己正在制作的那个拓展包的文件夹,右键Git bash here打开命令行。

../../_images/6-2.png

打开Git bash#

../../_images/6-3.jpg

Git bash的界面#

从命令提示符中可以看到我们现在的当前目录就是拓展包的文件夹。不过此时这里还建立Git仓库,所以我们要使用如下命令先创建一个空白的仓库:

$ git init

在这个命令中,运行的程序依然是git,操作类型是init,表示新建空仓库。(或称为初始化仓库,反正都一个意思)

可是我已经写了这么多代码了,为什么新建的仓库却是空的呢?明明已经有这么多文件了呀。为了弄明白这些,我们需要先知道Git的三种状态:

  • 已修改(modified):表示修改了文件,但还没保存到Git数据库中。

  • 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的内容中。

  • 已提交(commit):表示数据已经安全地保存在本地Git数据库中。

Git数据库又是个啥呢?大致的说,这是保存着仓库所有文件及其修改记录的地方。你对文件做出的种种修改、新增、删除,Git都给你妥善保管者,前提是你提交了那些修改。在运行完git init命令之后,你的拓展包文件夹里面就会出现一个.git文件夹,那是个隐藏文件夹,里面的内容就是Git为你保存的数据。

关于所谓的暂存啊提交啊三言两语很难讲明白,还是得从实践着手。既然现在我们已经创建好空仓库了,下一步我们就应该让Git追踪这些文件并创建初始提交了。使用命令:

$ git add .  # 将文件夹中所有的文件都加入暂存区
$ git commit -m "init" # 提交目前所有的文件,这样文件就正式存在于仓库里面了

git add .中,那个点表示的就是“当前目录”。回忆一下前面所说的,点点表示的是上级目录。add的作用就是将这些文件加入暂存区。而commit意为提交,选项-m表示提交信息(你得用一句话表示这个提交是干啥的),这里随便写了一句init表示这是本仓库的第一次提交。

这样一来,初始提交也完成了,现在我们已经有了一个真实项目的Git仓库了,并从仓库里面检出了所有文件的工作副本。(所谓检出就是从Git数据库中拿出那个文件,仓库中所有文件都是在Git管理范围内的)通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。

请记住,你工作目录下的每个文件都不外乎这两种状态:已跟踪未跟踪。已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是Git已经知道的文件。

因为我们这里暂存了所有文件并把它们都提交了,所以现在所有的文件都处于已跟踪状态。我们还是继续完成最初的目的吧,将自己的拓展发到gitee上去才好。

7.5. 上传拓展#

要将新仓库发到gitee去,你首先得在网页里面新建一个仓库。我们现在用的这个仓库名叫study,那就创建一个名为study的仓库吧。

../../_images/6-4.jpg

在页面右上角找到新建仓库#

../../_images/6-5.jpg

创建与文件夹同名的仓库#

注意下面初始化仓库啥的都不要勾选:

../../_images/6-6.jpg

不勾选那三个初始化的框#

这样一来,就在网页里面成功为自己账号创立了一个空仓库了。接下来要做的就是将自己的本地仓库推送远程仓库去。

网页里面应该已经告诉你如何操作命令行了,不过现在还是按照文章说的步骤来吧。

刚刚在网页中做的一系列操作就是创建了一个远程仓库。远程仓库存在的意义就是和他人进行协作,当然了备份也算个功能。不过我们的本地仓库还不知道自己已经有远程仓库了,现在我们就告诉他:

$ git remote add origin git@gitee.com:你的用户名/study

这样一来,我们就创建了一个名叫“origin”的远程仓库(远端),他的url是后面那个。有了远程仓库的话,我们就可以进行推送与拉取了。推送就是将本地的内容发送到远程仓库去,拉取则反之。顺便,推送是push,拉取则是pull。至于远程仓库的名字为何是origin,这是因为git clone的时候默认会给远程仓库取这个名字。

接下来就将我们的master分支推送到远程仓库吧:

$ git push

什么,推送失败了?这是因为我们现在还是第一次推送,git push命令不能用在第一次。第一次推送的话需要用这个命令:

$ git push -u origin master

这个命令的作用就是把本地的master分支和远端origin的master分支联系起来,以后就可以直接用git push命令了。

推送完成之后,刷新一下gitee的网页,你就发现文件都已经发上来了。快把仓库链接分享出来吧!(当然study就算了,可以多多分享自己的DIY仓库)

7.6. 更新拓展#

又回到更新这个话题上来了。欲更新拓展,需要走如下几步:

  1. 修改已有的文件,这样才有东西可以更新嘛

  2. git add .命令暂存所有文件,这样自然就包含了要更新的文件

  3. git commit -m "xxx"命令创建好提交

  4. git push命令完成推送,至此完成更新

还是举个例子为好。我们现在做的拓展也已经属于万千开源项目之一了,开源项目自然要有自己的许可证。因为新月杀本身是GPLv3协议开源的,所以拓展也需要用这个协议开源(协议里面规定了),声明协议的方式就是复制一个LICENSE文件进来。

新月杀本体里面已经包含一个LICENSE了,把他复制到拓展包文件夹里面吧。

复制了LICENSE文件之后文件夹内长这样:

../../_images/6-7.png

复制了LICENSE之后#

然后在git bash操作吧:

这样一来,我们就成功提交了最新的改动,并且推送到了Gitee。这就是拓展更新的步骤。