Files
MaaAssistantArknights/docs/zh-cn/develop/pr-tutorial.md
Lucien Shaw e461208bf9 chore: 完善容器配置及依赖安装 (#14208)
格式化工具部分:
1. pre-commit 引入 python 的格式化工具,包括 black(代码格式化)和 isort(对“包导入顺序”的规范)
2. 允许 prettier 对文档站的 markdown 文件格式化
3. 不允许 prettier 对 markdown 文件中的代码块的代码本身进行格式化
4. 升级了 pre-commit 的各个 hook 的版本
5. 优化了 pre-commit 的日志文本显示

容器总览部分:
1. 由原来的单一轻量环境转为区分空环境、轻量环境和全量环境
2. 空环境是裸 Linux 镜像(Ubuntu),为默认环境
3. 轻量环境适合开发文档站前端
4. 全量环境适合开发 MaaCore
5. 目前,全量环境完整包含了轻量环境,轻量环境完整包含了空环境
6. 在仓库 README.md 中更新了三个环境的描述,并将链接分别设置为对应环境的创建链接
   **注意:没有修改文档站中的对应文件**
7. 在各个语言的开发指南的最后,移除了 Codespace 部分的“安装额外依赖”相关描述,且将链接设置为全量环境的创建链接
   **注意:没有添加“开发文档站”的指南和对应 codespace 的使用方式**

容器的轻量环境和全量环境共有部分:
1. 安装 black 和 isort 包
2. 调整 VS Code 设置,取消先前(对 markdown 文件单独指定 markdownlint 扩展作为格式化工具)的错误设置,现在 markdown 文件仍然使用默认的 prettier 扩展作为格式化工具
3. 引入 markdown-all-in-one 扩展作为语法提示工具
4. 将 node_modules 和 3rdparty 排除在 VS Code 的文本的搜索路径之外

容器的全量环境部分:
1. 为 tools 下的所有 python 脚本安装依赖
2. 使用 tools/maadeps-download.py 下载 maadeps,且将必要二进制文件软链接到 /usr/local/bin/
3. 使用 apt 安装 cmake 和 clangd-20,将后者通过 update-alternatives 设置为系统 clangd 的默认版本
4. 使用 cmake tools 扩展,并按照 Linux 编译方法进行配置
5. 使用 clang-format 作为 c/cpp 的格式化工具,clang-format 程序主体来自 maadeps(已经软链接到 /usr/local/bin/)
6. 使用 clangd 作为 c/cpp 的语法提示工具
7. 将 MaaDeps、install 和 build 排除在 VS Code 的文本搜索路径之外

其它手动调整:
1. 更新文档站的 package.json,指定 pnpm 包管理器的版本
2. 手动保证 markdown 文件中的列表前后有空行(注意到 MarkdownLint 官方规则不一定能精准定位所有“列表前后空行”的问题,详见:https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md032---lists-should-be-surrounded-by-blank-lines )
3. 修改了部分 markdown 文件中的 json 代码块的语法问题
   **注意:相同的问题并未全部发现,仅修改了两处**
4. 在 tools 目录中,一处 python 脚本的包名误用(本地包名和某个 pip 包重名),这里修改了相应代码
5. 在 tools 目录中,一处 python 脚本使用了弃用的包 cchardet 的问题,这里更换了推荐使用的功能相近的包并修改了相应代码

自动化脚本提交的修改:
1. 自动格式化了大量 tools 中的 python 脚本
2. 自动格式化了大量 docs 中的 markdown 文件

Commits:

* chore: pre-commit引入black和isort规范py文件

* chore: Auto update by pre-commit hooks [skip changelog]

* chore: devcontainer添加isort扩展,排序python导入

* chore: pre-commit任务命名及更名

* style: isort fix

* chore: Auto update by pre-commit hooks [skip changelog]

* chore: 更新pre-commit的hook版本

* fix: 模块名与第三方库重名,大忌

* chore: 容器构建时额外安装isort

* docs: md -> markdown

* chore: 容器安装python包和maadeps

* fix: 修复过时python包

* chore: 指定pnpm版本

* chore: container支持选择轻量环境

* chore: 去掉rust

* chore: add plain env

* chore: 使用clangd语言服务器

* chore: 无需单独设置markdown的格式化工具

* chore: 更新安装的clangd版本

* docs: 简易文档适配

* docs: 在仓库README中重新编排codespaces相关指引

* chore: Auto update by pre-commit hooks [skip changelog]

* style: 调整缩进

* chore: 格式化工具不用特意排除被gitignore忽略的文件

* chore: sh文件在gitattributes中单列一类

* chore: 格式化docs下的markdown文件

* chore: 暂时不修改md文件中的代码块

* style: 人为明确markdown中的部分列表相关格式

* docs: 补上部分markdown的json代码块中缺失的逗号

* chore: Auto update by pre-commit hooks [skip changelog]

* chore: Auto update by pre-commit hooks [skip changelog]

* fix: 补上tools的服务器排序相关代码中缺失的逗号

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* chore: 使用maadeps的clangd

* build: 更新maadeps工具链版本

* style: prettier fix

* revert: 还原maadeps版本

* revert: 取消使用maadeps的clangd依赖,改用系统apt安装

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-30 19:39:48 +08:00

215 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
order: 3
icon: mingcute:git-pull-request-fill
---
# 纯网页端 PR 教程
牛牛也能看懂的 GitHub Pull Request 使用指南 (\*´▽ )
::: warning
本教程中对很多概念进行了简化,为了让更多朋友能实际用起来,甚至有一些很不优雅~~但是简单~~的操作,还有一些不那么正确的解释,还请大佬们轻喷。
若您有一定的 git 使用经验及编程基础,~~那你还看个 🔨~~,可以看稍微进阶一点的教程 [Github Pull Request 流程简述](./development.md)
:::
## 基本概念及名词解释
这一章节内容略微枯燥,不感兴趣可以直接跳过到下面实操部分,有不理解的再回来看
### Repository仓库
简称 repo存放我们代码及其他资源文件的地方
👇 可以简单理解为当前这个网页及里面所有的内容,就是 MAA 的仓库(我们一般称之为 MAA 的主仓库)
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/repository-light.png',
dark: 'images/zh-cn/pr-tutorial/repository-dark.png'
}
]" />
### Fork复制
复制,字面意思,将 MAA 的代码复制一份,然后可以进行后续修改等等的操作,避免把原来的弄坏了
但一般说中文“复制”我们可能首先想到的是 copy 的意思fork 也没有其他明确的翻译,所以我们一般习惯直接说英文,比如“把代码 fork 一份走”
既然是复制后的,那就是 `MAA (1)`bushi
为了和原本的仓库区分开,所以我们一般将原本的 MAA 仓库称为 “主仓库”、“upstream上游仓库
因为每个人都可以自己复制一份走所以复制后的称之为“个人仓库”“origin原仓库
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
### Pull Request拉取请求、合并请求
简称 PR“拉取请求”这个太直译了听起来很奇怪~~而且字太多了打起来太累~~,所以也是一样的大家一般就直接说:“来个 PR”
书接上文,你 fork复制的个人仓库修改完了怎么把内容提供给主仓库呢这时候我们就可以开一个 PR申请将自己修改的内容加入到主仓库中。
当然啦既然是“请求”那自然是需要审批的MAA Team 的各位可能会针对你的修改提一些意见等,当然我们的意见也不一定完全正确,大家合理讨论~
👇 下面的是目前大佬们提的 PR正在等待审批的
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pull-request-light.png',
dark: 'images/zh-cn/pr-tutorial/pull-request-dark.png'
}
]" />
### Conflict冲突
假设一下,主仓库中有个 A 文件,它的内容是 111
你 fork 了一份,将其内容改成了 222但是你刚准备提交 PR这时候张三也 fork 了一份并提交了 PR并将 A 文件改成了 333
这时候我们就会看到,你俩都修改了 A 文件,并且修改的不同,那听谁的好呢?这就是 Conflict冲突
冲突解决起来比较麻烦,这里仅阐述概念,方便实际遇到时能理解发生了什么,暂不阐述解决方案
## 纯网页端 PR 操作全流程
1. 首先进入 MAA 主仓库,点右上角这个按钮 Fork 一份代码
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
2. 然后直接点击 Create Fork
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-2-dark.png'
}
]" />
3. 接下来来到了你的个人仓库,可以看到标题是 "你的名字/MaaAssistantArknights",下面一行小字 forked from MaaAssistantArknights/MaaAssistantArknights (复制自 MAA 主仓库)
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-3-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-3-dark.png'
}
]" />
4. 找到你要改的文件,可以点 "Go to file" 进行全局搜索,也可以直接在下面的文件夹里翻(如果你知道文件在哪的话)
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-4-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-4-dark.png'
}
]" />
5. 打开文件后,直接点击文件右上角的 ✏️ 进行编辑
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-5-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-5-dark.png'
}
]" />
6. 开改!(如果是资源文件这种,我们建议先在你电脑上的 MAA 文件夹里测试修改,确认没问题了再粘贴到网页上,避免改错了)
7. 改完了,点击右上角的 👇 这个按钮,打开提交页面,写一下你改了啥
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-1-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-1-dark.png'
}
]" />
我们有一个简单的提交标题[命名格式](https://www.conventionalcommits.org/zh-hans/v1.0.0/),最好可以遵守一下,当然如果实在看不懂也可以先随便写
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-2-dark.png'
}
]" />
8. 还有第二个文件要改的?改完了发现弄错了想再改改?都没关系!重复步骤 4-7 即可!
9. 全改好了进行 PR !直接点 Code 回到**个人仓库**的主页
如果有 Compare & Pull Request 按钮,那最好,直接点他!
如果没有也不用着急,点下面的 Contribute贡献按钮再点 Open Pull Request 也是一样的
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-9-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-9-dark.png'
}
]" />
10. 这时候来到了主仓库的 PR 页面,请核对一下你要 PR 的是不是你想提交的
如图中,中间有个向左的箭头,是将右边的的 个人姓名/MAA 的 dev 分支,申请合并到 主仓库/MAA 的 dev 分支
而往下翻则是这两个分支之间的差异,即你都改了什么
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-10-1-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-10-1-dark.png'
}
]" />
然后写一下标题,你要修改了的具体内容等等的,然后点确认
PR 的标题也需要遵守一下[命名格式](https://www.conventionalcommits.org/zh-hans/v1.0.0/),当然如果还是看不懂也可以先随便写
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-10-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-10-2-dark.png'
}
]" />
11. 等待 MAA Team 的大佬们审核吧!当然他们也可能会提意见
👇 比如(纯属娱乐切勿当真)
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-11-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-11-dark.png'
}
]" />
12. 如果大佬们说要再修改一些小问题的话,回到 **你的个人仓库**,重复 步骤 4-7 即可!
注意不需要操作步骤 1-2重新 fork和步骤 9-10重新 Pull Request你当前的 Pull Request 仍处于待审核状态,后续的修改会直接进入到这个 Pull Request 中
👇 比如可以看到最下面多了一条再次修改的内容
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-12-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-12-dark.png'
}
]" />
13. 等大佬们审批通过,就全部完成了,你修改的内容已经进入 MAA 主仓库啦!
14. 下次如果还想提别的 PR请先回到你的个人仓库的主页点击 Sync fork让你的仓库和主仓库同步。
这里注意啦,如果有一个红色的 Discard 1 commit那就点红色的这个如果没有再点绿色的 Update branch。
接下来就可以重复 4-10 的步骤再次修改啦
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-14-1-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-14-1-dark.png'
},
{
light: 'images/zh-cn/pr-tutorial/pr-14-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-14-2-dark.png'
}
]" />
在**版本发布后**,你的 GitHub 头像将会自动进入到贡献者列表名单中,非常感谢各位的无私奉献!
~~怎么全是二次元啊,哦我也是啊,那没事了~~
::: tip 贡献/参与者
感谢所有参与到开发/测试中的朋友们,是大家的帮助让 MAA 越来越好! (\*´▽ )
[![Contributors](https://contributors-img.web.app/image?repo=MaaAssistantArknights/MaaAssistantArknights&max=105&columns=15)](https://github.com/MaaAssistantArknights/MaaAssistantArknights/graphs/contributors)
:::