ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Yii 2 贡献者 Git 工作流全指南:从环境搭建到 Pull Request 合并

Yii 2 贡献者 Git 工作流全指南:从环境搭建到 Pull Request 合并 后端Web框架【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址https://gitcode.com/gh_mirrors/yi/yii2点击查看免费下载本篇指南面向希望向 Yii 2 框架贡献代码的开发者完整梳理了 Yii 官方维护的 Git 协作流程如何 fork 并搭建本地开发环境、如何配置测试与静态分析工具、如何针对 bug 修复与功能增强创建独立分支、规范地更新 CHANGELOG 并最终提交 Pull Request。读完本文你将掌握一套可直接照做的 11 步贡献流程以及php build/build开发辅助命令的完整用法让代码更快、更顺利地被 Yii 核心团队接受。本文依据仓库中的 docs/internals-ru/git-workflow.md其英文原版为 docs/internals/git-workflow.md整理扩充并结合 build 目录 下的实际源码、phpunit.xml.dist、phpstan.dist.neon、tests/data/config.php 等文件佐证说明。如果你对 Git 与 GitHub 尚不熟悉建议先了解 GitHub 帮助文档、Try Git 教程或 Git 内部数据模型等入门材料再进入本文。一、准备你的开发环境以下步骤用于搭建一套可用于修改 Yii 框架核心代码的本地开发环境。这些步骤只在第一次贡献时需要执行。1. Fork 仓库并克隆到本地在 GitHub 上 fork Yii 2 仓库后将你的 fork 克隆到开发环境中git clone gitgithub.com:YOUR-GITHUB-USERNAME/yii2.git如果在 Linux 上配置 Git 与 GitHub 时遇到问题或出现类似 Permission Denied (publickey) 的错误则需要按 GitHub 官方指引完成 SSH 密钥的配置。如果你对 Git 还不熟练官方推荐的免费《Pro Git》一书是很好的学习资料。2. 将主仓库添加为名为 upstream 的远程仓库进入克隆下来的目录通常名为yii2执行git remote add upstream https://github.com/yiisoft/yii2.git这样你的本地仓库就有两个远程origin你的 fork负责推送与upstream官方主仓库负责同步最新代码。在后续所有工作流步骤中保持origin与upstream分工清晰是基础。3. 准备测试环境如果你只打算参与翻译或文档工作以下步骤可以跳过但如果要修改框架代码则必须完成。安装 PHP 依赖在仓库根目录执行composer install假设你已经全局安装了 Composer。安装 JavaScript 依赖如涉及 JS 工作npm install用于安装 JavaScript 测试工具与依赖假设已安装 Node.js 和 NPM。从当前仓库的 package.json 可以看到JS 测试栈包含 mocha、chai、jsdom、sinon、leche 等测试入口为npm test另提供npm run lint用于 eslint 检查作用于 framework/assets 与 tests/js。注意JavaScript 测试依赖 jsdom 库其要求 Node.js 4 或更新版本官方更推荐 Node.js 6 或 7。克隆基础应用basic模板并建立软链接php build/build dev/app basic这条命令会克隆 basic 应用模板并安装其 composer 依赖。外部第三方包会正常安装到 vendor 目录但Yii 框架本体并不会复制一份而是把当前检出的 yii2 仓库通过软链接指到应用的vendor/yiisoft/yii2从而保证整个开发环境中只存在一份框架代码。如果需要可对 advanced 应用执行同样的操作php build/build dev/app advanced该命令内部执行的是composer update因此也可以用它来更新依赖。注意默认情况下 build 命令通过 SSH 协议克隆 GitHub 仓库如需改用 HTTPS请在 build 命令后追加--useHttp标志。这一步完成后你就拥有了一块可以放心实验 Yii 2 的开发场地。深入源码build/build与DevController做了什么php build/build并非外部工具而是仓库自带的构建脚本见 build/build它开启YII_DEBUG、加载 composer 自动加载器兼容 yii2 作为根包或 yii2-basic/yii2-advanced 作为根包两种场景、加载 framework/Yii.php然后以yii\build\controllers为命名空间启动一个控制台应用。dev/app、dev/ext等子命令由 build/controllers/DevController.php 实现其关键行为包括内置basic、advanced、benchmark三个应用的仓库地址映射以及 apidoc、authclient、bootstrap、redis、mongodb 等二十余个扩展的地址映射dev/app先克隆应用仓库若目录不存在清理其vendor/yiisoft下已存在的软链接执行composer update --prefer-dist最后通过linkFrameworkAndExtensions()将 framework 目录和extensions/下已安装的扩展以符号链接方式挂进应用的 vendor 目录提供--useHttp克隆改用 HTTPS与--composerNoProgresscomposer 追加--no-progress两个选项另有dev/all安装全部应用与扩展与dev/run command在所有应用与扩展目录中批量执行命令例如./build/build dev/run git pull两个辅助动作。也就是说php build/build dev/app basic的链接行为是有明确源码依据的它会删除应用 vendor 目录中的实体目录再以symlink()指向当前开发仓库保证你改动框架代码后应用立即生效无需重新安装。可选运行单元测试在仓库根目录执行phpunit即可运行单元测试。若未全局安装 phpunit可使用php vendor/bin/phpunitWindows 下为vendor/bin/phpunit.bat。仓库根目录的 phpunit.xml.dist 定义了测试套件覆盖整个tests目录、yiiunit\ResultPrinter打印器、以及覆盖率统计的范围与排除项。部分测试需要额外安装并配置数据库。你可以创建tests/data/config.local.php来覆盖 tests/data/config.php 中的默认配置。从该文件源码可见默认配置了 cubrid、mysql、sqlite、sqlsrv、pgsql、oci 共六种数据库的 DSN、账号与 fixture 脚本且会在文件末尾自动 include 同目录下的config.local.php以允许覆盖。例如修改 MySQL 的用户名与密码只需在config.local.php中写入?php $config[databases][mysql][username] yiitest; $config[databases][mysql][password] changeme;你还可以只运行与当前工作相关的测试组。例如只运行验证器与 redis 相关测试phpunit --groupvalidators,redis用phpunit --list-groups可以查看所有可用的测试分组。JavaScript 单元测试则在仓库根目录执行npm test可选静态分析Yii 2 使用 PHPStan 进行静态分析启动命令为php vendor/bin/phpstanWindows 下为vendor\bin\phpstan.bat。默认情况下PHPStan 使用仓库根目录的 phpstan.dist.neon 作为配置——从该文件可见其分析级别为level: 3分析路径覆盖build、framework、tests并排除了tests/data等测试数据目录。你也可以创建自己的phpstan.neonPHPStan 会优先使用它仓库中还提供了 phpstan-baseline.neon 与针对 PHP 7.x 的 phpstan-7x.dist.neon、phpstan-baseline-7x.neon 等配套文件。关于 PHPDoc 注解的约定在 PHPDoc 注释中Yii 使用 PHPStan 类型如果需要为 Psalm 指定不同的类型通常在泛型场景下会发生则应让 Psalm 注解与 PHPStan 注解并存。正确的写法示例如下/** * return Actioncovariant static|null * phpstan-return Actioncovariant static|null * psalm-return Actionself|null */ public function createAction($id) { ... }即同一处返回值分别用return供通用阅读、phpstan-return供 PHPStan 推断与psalm-return供 Psalm 推断三条注解表达保证两个分析器都能得到精确的类型信息。扩展开发要开发某个扩展需要先克隆对应扩展的仓库。仓库提供了一条专用命令php build/build dev/ext extension-name fork其中extension-name是扩展名例如redisfork是你的扩展 fork 地址例如gitgithub.com:my_nickname/yii2-redis.git。如果你是框架核心贡献者可以省略fork参数此时会使用 DevController.php 内置的官方扩展地址如gitgithub.com:yiisoft/yii2-redis.git。如果想把某个扩展放进应用模板中测试只需像平时一样把它加入应用的composer.json例如在 basic 应用的require段添加yiisoft/yii2-redis: ~2.0.0然后重新运行php build/build dev/app basic它会安装该扩展及其依赖并为extensions/redis创建符号链接——这样你直接工作在 yii2 仓库目录内而不是 composer 的 vendor 目录里改动即时生效。注意默认通过 SSH 克隆 GitHub 仓库如需 HTTPS同样追加--useHttp标志。二、修复 bug 与开发新功能的完整流程环境就绪后就可以开始正式的贡献流程了。下面的 11 个步骤是 Yii 官方推荐的协作规范请逐步遵循。1. 确认存在对应的 issue所有新功能与 bug 修复都应关联一个 issue作为讨论与文档记录的唯一参照点。动手前花几分钟在 issue 列表中检索是否有匹配项若已存在对应 issue请在该 issue 下留言说明你打算接手若没有匹配的 issue请新建一个 issue参见 docs/internals-ru/report-an-issue.md如果只是直截了当的小修复也可以直接创建 Pull Request。对于小改动、文档问题或简单修复无需先建 issue直接提交 Pull Request 即可。2. 拉取主仓库的最新代码git pull upstream master每次开始新贡献都应从这一步做起确保你在最新代码上工作。3. 基于最新 master 创建新的特性分支这一步非常重要如果你直接在 master 上开发你将无法从自己的账号提交第二个 Pull Request。每个独立的 bug 修复或改动都应有自己的分支。分支名应具备描述性并以所关联 issue 的编号开头如果没有关联特定 issue可省略编号。例如git checkout upstream/master git checkout -b 999-name-of-your-branch-goes-here4. 写代码做你的魔法确保代码可以工作。单元测试永远受欢迎经过测试、覆盖率良好的代码能极大简化审查工作即使只是描述问题的失败测试也同样被接受。5. 更新 CHANGELOG编辑 CHANGELOG 文件把改动记录插入到文件顶部第一个标题即当前正在开发的版本之下。从 framework/CHANGELOG.md 可以看到实际格式——当前版本标题为2.0.56 under development其下每条记录形如Bug #999: a description of the bug fix (Your Name) Enh #999: a description of the enhancement (Your Name)其中#999是Bug或Enh所对应的 issue 编号。变更记录应按类型Bug、Enh分组并按 issue 编号排序。对于非常小的修复例如拼写错误、文档改动无需更新 CHANGELOG。6. 提交你的更改先把要提交的文件加入暂存区git add path/to/my/file.php也可以使用-p选项交互式挑选要进入本次提交的改动。然后用描述性的提交信息提交。信息中务必包含#XXX编号这样 GitHub 会自动把该提交与对应 issue 关联git commit -m A brief description of this change which fixes #999 goes here7. 再次拉取 upstream 最新代码到你的分支git pull upstream master这确保在提交 Pull Request 之前你的分支包含最新代码。如果出现合并冲突请立即解决并再次提交。这样可以保证 Yii 团队能以一键合并的方式合入你的改动。8. 解决冲突后推送代码到 GitHubgit push -u origin 999-name-of-your-branch-goes-here-u参数会把本地分支与 GitHub 上的分支建立关联之后再次执行git push时 Git 会自动知道推送目标。如果你想后续继续向该 Pull Request 追加提交这会非常方便。9. 向 upstream 发起 Pull Request在 GitHub 上进入你的仓库点击 Pull Request在右侧选择你的分支并在评论框中填写更多信息。要关联 issue请在 Pull Request 描述中任意位置写上#999999 为 issue 编号。注意每个 Pull Request 只应修复单一改动。对于多个互不相关的改动请分别发起多个 Pull Request。10. 等待代码评审会有人评审你的代码并可能要求你做出修改——此时回到第 6 步即可只要当前 Pull Request 仍处于打开状态就无需新开一个。如果代码被接受它会被合并进主分支成为下一个 Yii 版本的一部分如果未被接受也不必气馁——不同的人需要不同的功能Yii 无法满足所有人的全部需求你的代码仍会留在 GitHub 上作为有需要的人的参考。11. 清理代码被接受或拒绝之后可以删除本地仓库与origin上工作过的分支git checkout master git branch -D 999-name-of-your-branch-goes-here git push origin --delete 999-name-of-your-branch-goes-here三、关于 CI 的注意事项为了尽早发现回归每次对 Yii 代码库的合并都会被 CI 系统捕获并自动运行测试。核心团队不希望过度消耗这一服务因此在以下情形中会在合并描述中加入[ci skip]标记以跳过测试运行改动只涉及 JavaScript、CSS 或图片文件仅更新文档改动只涉及固定字符串例如翻译更新。这些改动本质上不涉及单元测试覆盖的范围跳过 CI 可以节省构建资源。在当前仓库中可以结合根目录的 Dockerfile、tests 目录 的测试配置如 phpunit.xml.dist、tests/bootstrap.php理解测试运行的整体依赖。四、命令速查面向进阶贡献者将上述完整流程浓缩为命令序列git clone gitgithub.com:YOUR-GITHUB-USERNAME/yii2.git git remote add upstream https://github.com/yiisoft/yii2.gitgit fetch upstream git checkout upstream/master git checkout -b 999-name-of-your-branch-goes-here /* 写代码如有需要更新 CHANGELOG */ git add path/to/my/file.php git commit -m A brief description of this change which fixes #999 goes here git pull upstream master git push -u origin 999-name-of-your-branch-goes-here再配合环境搭建阶段的composer install、npm install、php build/build dev/app basic以及需要时对 advanced 应用的同样操作、phpunit与php vendor/bin/phpstan你就拥有了一套从搭建、开发、测试、静态分析到提交的完整 Yii 2 贡献闭环。五、小结Yii 2 的贡献流程之所以强调每改动一个独立分支分支名以 issue 编号开头CHANGELOG 分组按编号排序提交信息携带 #XXX本质上是为分布式协作中的讨论、追溯与自动关联提供统一的锚点。这套规范配合仓库自带的build工具链软链接式开发环境与 PHPStan/phpunit 质量门槛让外部贡献者与核心团队之间能够高效、可预期地协作。按照本文的步骤走完一遍你的第一个 Yii 2 Pull Request 就已经在路上了。赞分享后端Web框架【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址https://gitcode.com/gh_mirrors/yi/yii2点击查看免费下载相关推荐marimo 交互组件指南使用 mo.ui.checkbox 构建响应式勾选开关marimo 交互组件指南使用 mo.ui.checkbox 构建响应式勾选开关 marimo 的 mo.ui.checkbox 是一个布尔型交互组件用于在后端Web框架微信网页版访问终极指南如何用wechat-need-web插件轻松解锁微信网页版微信网页版访问终极指南如何用wechat need web插件轻松解锁微信网页版 还在为微信网页版无法正常登录而烦恼吗您是否经常遇到微信网页版访问受限的困扰后端Web框架Taro 贡献者指南从环境搭建到 Pull Request 全流程实战Taro 贡献者指南从环境搭建到 Pull Request 全流程实战 TaroNervJS/taro是支持 React/Vue/Nerv 等框架、可同时前端小程序跨平台移动开发上一篇天龙八部单机版GM工具5步掌握可视化游戏数据管理下一篇Windows性能调优三层路径AtlasOS驱动级优化完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表