服务器初始化配置

连接服务器

ssh 用户名@IP

服务器安装 Git

以 Ubuntu 为例:

sudo apt update
sudo apt install git

服务器配置 Git

以下命令在服务器上创建了一个 Git 用户充当管理员:

git config --global user.name "GitAdmin"
git config --global user.email "邮箱"

以下命令将初始分支的默认名称改为 Git 最新约定的 main,以避免某些错误,之后本地配置同理。

git config --global init.defaultBranch main

服务器初始化仓库

切换到当前用户主目录依次创建文件夹 MC/saves,再进入其中创建一个与存档文件夹名相同的文件夹:

cd ~
mkdir -p MC/saves/存档名 && cd MC/saves/存档名

进入该文件夹运行以下命令:

git init --bare

这是创建了一个 bare 仓库,等于是没有工作目录(那些原始文件)的 Git 仓库,bare 仓库里面的内容就是普通仓库里 .git 文件夹里的内容。要提取出普通文件还需要另外使用命令。bare 仓库一般被用作服务器上的中心仓库,用户可以从其中 clone 和 push,而不会遇到奇怪的权限问题。

如果在初始化时忘记了添加 –bare 选项(bare 仓库允许直接推送到当前分支),可使用以下命令将其转换:

git config --bool core.bare true

本地初始化配置

本地安装 Git

https://git-scm.com/download

本地配置 Git

git config --global init.defaultBranch main

git config --global user.name "名字"
git config --global user.email "邮箱"

事实上这里名字甚至可以写中文。

设置 ssh 密钥认证

当将更新推送到服务器,或从服务器拉取最新内容时时,将会要求服务器相应用户的密码。为简化推送流程,可以考虑设置 SSH 密钥认证。

ssh-keygen -t rsa -C "邮箱"

之后一路回车(即选择默认保存位置、不设置密钥的密码短语)即可。该密钥一般保存在 C:\Users\用户名\.ssh 位置。

在服务器上找到 ~/.ssh 路径,例如 /root/.ssh,没有就 mkdir -p ~/.ssh 创建一个,之后可以使用 FileZilla 下载并打开里面的 authorized_keys 文件,向其中追加 C:\Users\用户名\.ssh\id_rsa.pub 中的内容,再上传覆盖即可。

本地初始化仓库

用 VS Code 打开存档文件夹,找到左侧的源代码管理标签,点击“初始化仓库”;这时仓库没有名字,可在之后将远程仓库与其关联时再指定。

此时会显示当前目录下诸多更改,在“消息”处填写更新说明,不妨写成“初始化”,确认无误可以点击“提交”,之后每次更新这个消息就写成日期。之后跳出的提示是是否跳过暂存直接提交,确认即可。

此时,本地仓库已经可以正常工作。

本地添加远程仓库

为了将该仓库的内容发布到服务器,在 VS Code 打开的存档文件夹根目录中打开终端,输入以下命令:

git remote add 仓库名 服务器用户名@服务器IP地址:仓库路径

这是将之前服务器上创建的空白仓库关联到本地当前打开这个仓库,今后发布更新就可以选择发布到该远程仓库。注意成功执行后不会有任何输出提示;运行 git remote -v 可以确认是否添加成功。

本地发布到服务器

之后在侧面源代码管理中点击“发布 Branch”即可。

检查是否发布成功,可在服务器上运行类似以下命令:

du -sh /root/saves/存档名

如果发现文件夹大小和本地存档类似,说明已成功推送。

玩家初始化配置

玩家电脑初始化配置

请参照本地初始化配置部分安装 Git、配置 Git、设置 ssh 密钥认证。

玩家拉取存档

进入游戏的 saves 文件夹,打开终端运行以下命令:

git clone 服务器用户名@服务器IP地址:仓库路径

之后使用 NBTExplorer 打开 level.dat,删除其中的 Player 词条,这样能避免存档在不同电脑、不同玩家间转移时出现串物品栏的问题。

玩家日常使用

特别提示

MC 存档包含大量二进制文件,因为 Git 无法有效合并二进制文件的修改,在出现冲突时可能会直接采用来自最新提交玩家的版本,而非将不同玩家对同一文件的更改全部保留。因此,请确保同时只有一个玩家使用该存档,当该玩家推送更新到服务器后,才能允许下一个玩家拉取存档。

本文考虑使用 Git 管理存档的目的是在用自己电脑开服的服主未在线时,其他玩家也可以拉取服务器的存档。最佳实践:使单独一个玩家拉取存档并开服,其他玩家均连接该玩家的电脑。

开始游戏前拉取最新版存档

用 VS Code 打开存档文件夹,找到侧面“源代码管理”标签,点侧边栏右上角“…”中的“拉取”。

之后使用 NBTExplorer 打开 level.dat,删除其中的 Player 词条,再进入游戏。

游玩后提交更新

用 VS Code 打开存档文件夹,找到侧面“源代码管理”标签,依次点击“提交”“同步更改”即可。