就算世界终结,也无所谓

愿你有一天,能与你最重要的人重逢

巧用 Git 对 Blessing Skin Server 进行增量更新

最近 Blessing Skin Server 这个被一众服务器所采用的 Minecraft 皮肤站程序好像又要更新了。

虽然说 @printempw 在 v3.3.1 发布的时候说“It’s the final version”,然而在交流群内一众 julao 和 @GPlane 的推动下还是发布了 v3.3.2(“ just some minor bug fixes”) ,而且最近好像又要更新了。

虽然说更新是好事,但是对 LittleSkin 来说,每次更新都是坠痛苦的…因为 LittleSkin 对 Blessing Skin Server 做了大量的改动(主要是语言文件和视图文件)使其变得我理解的更易用,但是 Blessing Skin Server 从 v3.1 开始只提供完整升级的方式,这就意味着 LittleSkin 做的改动在每次更新时都会丢失,然后又要重新改一遍…

哇这就很难受了啊。把这个放在去年 8 月之前 LittleSkin 还没有被 CustomSkinLoader 钦点的时候还好,但是现在 LittleSkin 有 5K+ 用户,你让我停个半天下来慢慢改得损失多少啊?

况且我周六学校要上课周日还要补大半天课,要是还做这个我 tm 不要写作业了啊?

不过前几天看到了果果 julao这一篇文章,想到了去年六月我在开发辣鸡 Bing 今日美图 API 的时候使用 GitHub Desktop 拉取远程代码时的场景:只拉取最近提交的代码。

OMG 这不就是我想要的增量更新方法吗?!!

HK Reporter or Mr. Wallace?

这篇文章仅适用于有皮肤站所在服务器的 SSH(或者远程桌面)和 Git 权限的用户。

简单来说就是只适用于 VPS 或者独立服务器用户,虚拟主机用户还是别想了,IDC 一般不会给你这个权限的。

另外,本文不适合小白和不想折腾的人。这类人还是乖乖去用稳定版比较好。

你们给我搞的这本东西啊…Excited!

在开始之前,你需要准备以下环境:

  • SSH
  • Git
  • Yarn
  • Composer
  • 一个 GayGitHub 帐号
  • 在各大代码托管平台上的一个空的项目仓库(可选)
  • 你的脑子

本文接下来将会以 CentOS 7 系统为例,其他 GNU/Linux 发行版和 Microsoft Windows 的操作大同小异,就不再赘述了。

以及本文使用的代码托管平台是 Coding ,其他平台一样大同小异,同上。

如果报道上出了什么偏差,欢迎批判一番

江来报道上出了什么偏差,我可是负不起泽任的,识得唔识得?

文中如有疏漏之处,欢迎在评论区批评指正。

西方的那一套理论

首先你需要创建一对 SSH 密钥。

ssh-keygen -t rsa

使用这个指令来创建一对 RSA 2048 位的 SSH 密钥对,包含一个公钥和一个私钥。执行这个语句后大概会出现如下图所示的东西,如果你不需要做什么改动的话,连续按三次 Enter 就好。

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): # 更改密钥存储位置
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): # 输入私钥密码,不想设置就不用输
Enter same passphrase again: # 再次输入私钥密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**
The key's randomart image is:
+--[ RSA 2048]----+
| .....o.B+.      |
|..o ...=.o .     |
| .Eo . o. o      |
|    .  ..+ o     |
|      o S * .    |
|       o . .     |
|                 |
|                 |
|                 |
+-----------------+

生成的公钥位于 /root/.ssh/id_rsa.pub,私钥位于 /root/.ssh/id_rsa

cat /root/.ssh/id_rsa.pub

使用这个指令查看你刚刚生成的 SSH 公钥,然后在你的仓库中部署这个公钥,注意授予推送权限。

注意,在 GitHub 上也要部署帐户公钥(Settings -> SSH and GPG keys -> New SSH key),否则在拉取 Blessing Skin Server 的代码时可能会出现 Permission denied 的错误。

然后,你应该设置你的用户名和邮箱。使用以下指令来设置:

# your_id 是你的用户名,your_email 是你的邮箱。这些信息应与你在代码托管平台上的信息一致。
git config --global user.name "your_id"
git config --global user.email "your_email"

进入你的站点根目录,先对你的站点做一个备份,然后删除所有文件。

git init

使用这个指令在当前目录创建一个工作区,然后执行以下两个指令来关联 Blessing Skin Server 和你的项目仓库:

# bs-github 和 coding 是远程仓库的别名,你可以自定义;git@coding.net:your_id/your_repo_name.git 是你在代码托管平台上的仓库的 Git 地址。
git remote add bs-github git@github.com:printempw/blessing-skin-server.git
git remote add coding git@coding.net:your_id/your_repo_name.git

关联完成后,执行以下指令来第一次拉取 Blessing Skin Server 的最新提交的代码:

git pull bs-github master

首次拉取代码时可能会询问是否继续连接,输入 yes 即可。

Are you sure you want to continue connecting (yes/no)? yes
如果你是国内的主机,执行这步时速度可能较慢。你可以开个 screen 会话,丢到里面慢慢跑。
通常情况下,这次拉取的代码会包含有最新的稳定版中还没有更新的特性和 Bug 修复,所以如果最后你的皮肤站变得有些不一样了,不要惊讶哦(笑)

将你的改动重新上传,然后编译 Blessing Skin Server。

# 使用 Composer 安装依赖
composer install
# 安装 Yarn 的依赖
yarn install
# 使用 Yarn 构建前端代码
yarn run build

上传刚才做的备份中的 storage/texturesplugins 目录以及 .env 文件到你的站点根目录,然后执行以下这条语句,将本地代码提交到本地工作区并推送到你的仓库:

# 提交代码
git commit -a -m "你的提交说明"
# 推送代码
git push coding master
如果你的远程仓库所在的代码托管平台不是 GitHub,那么在首次提交时可能也会询问是否继续连接,同样输入 yes 即可。

然后你就可以像往常一样使用你的皮肤站了。

当 Blessing Skin Server 发布更新时,你不应该使用管理面板中自带的更新工具,只需要再次拉取 Blessing Skin Server 的仓库的最新提交:

git pull bs-github master

然后再次编译即可完成增量更新。更新完成后你需要再次提交并推送本地工作区中的代码,以保证你的远程仓库中的代码与你本地工作区的代码一致:

# 提交代码
git commit -a -m "你的提交说明"
# 推送代码到远程仓库
git push coding master
至此,增量更新完成!Enjoy it~

一些说明 & 后记

编写这篇博文的过程中我想了一下,其实应该是可以不关联你的远程仓库的,只需要保证从 GitHub 拉取 Blessing Skin Server 的最新代码时本地工作区干净即可,这也是为什么远程仓库是可选的;但是写完本文后还是发现关联远程仓库有许多好处,比如当增量更新后程序出现错误时可以方便地回滚到截止上次推送时的所有代码(从远程仓库强制拉取仓库内的所有代码即可)以快速恢复皮肤站的正常运行,又比如可以使用 Coding 的 WebIDE 和动态 Pages 服务方便地对皮肤站进行修改并进行测试 etc. 当然这个就见仁见智了,如果你想省事的话当然可以不关联,直接在拉取更新之前提交代码即可;但是如果你想给你的皮肤站提供更多的冗余空间的话,我还是建议你关联一个的。

你不一定要等到 Blessing Skin Server 发布新版本了才拉取新推送的代码,定期从官方仓库拉取代码可以获得稳定版中尚未发布的新的特性和 Bug 修复。除了 Blessing Skin Server 官方仓库,你还可以关联 @GPlane 的仓库:

git remote add gplane git@github.com:g-plane/blessing-skin-server.git

他的 dev 分支的开发进度比 Blessing Skin Server 官方仓库还要快(事实上很多代码都是他贡献的),但相应的这个分支的 Bug 也会比官方仓库的 master 分支要多一些,所以生产环境里无视这条啦。

最后再次感谢 @GPlane 对我的指导,谢谢 :-)

点赞
由于 LiveRe 使用的头像 API 不支持 HTTPS,现在已经禁用了 QQ、微信和微博的 OAuth 登录。
我也不想就这样因噎废食,但事实是我根本没有能力去搭建一个反代。
如果你发现了有评论被删除的痕迹,八成是这些评论使用的 OAuth 方式是 QQ 或者微信或者微博。