从零到 PR 合并:GitCode 工作流与开源贡献全流程指南
【免费下载链接】community本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息项目地址: https://gitcode.com/cann/community
第一次给 CANN 社区提代码?这篇 GitCode 工作流指南把开源贡献的完整链路走了一遍:环境配置、Fork 克隆、本地同步、提交推送、创建 PR、门禁评审,再到冲突自救。照着做,你的第一个 PR 就能顺畅走完全部流程。
装好 Git,再把 GitCode 账户信息配正确
动手前只需要两样东西:一台装好 Git 的电脑,一个配好信息的 GitCode 账户。工具用法不熟的话,搜一套基础教程就能快速上手;想看看社区里都有什么项目,可以逛一下 CANN 组织主页。
账户信息直接决定你的提交署名,顺手把用户名和邮箱填上:
git config --global user.name "your_GitCode_Name" git config --global user.email "your_GitCode_email"邮箱强烈建议和 CLA 签署时用的一致。两边对不上,提交可能无法和贡献协议关联,后面的流程会白白卡一下。
配置 SSH 公钥,告别每次输密码
每次推送都要敲密码很折磨人,用密钥对代替密码就舒服了。本地生成一对密钥,把公钥内容复制出来:
ssh-keygen -t rsa -C "your_GitCode_email" cat ~/.ssh/id_rsa.pub然后在 GitCode 的"个人设置 → 安全设置 → SSH 公钥"里把公钥粘进去保存。最后验证一下链路是否通了:
ssh -T git@gitcode.com看到Welcome to GitCode, $user_name的欢迎语,说明配置生效,之后推拉代码全程免密。
Fork 并克隆到本地工作目录
GitCode Fork 克隆分三步。先在官方项目页点右上角的 Fork 按钮,创建一份挂在自己名下的副本——以后你的改动都先落在这份副本上,不碰官方主干。
接着建一个干净的工作目录,把 Fork 拉到本地,并登记上游仓库:
mkdir -p ~/code && cd ~/code git clone https://gitcode.com/${your_name}/${repo_name}.git cd ${repo_name} git remote add upstream https://link.gitcode.com/i/133f9aff4ef50dd9f3c3d725d3d98fee/${repo_name}.gitupstream指向官方源仓库,是后续同步主干进度的参照物;缺了它,你的本地副本就只和自己的 Fork 打交道了。
最后开一条自己的开发分支,之后所有修改都发生在它上面:
git checkout -b myfeature别直接在 master 上写代码,留一条干净的分支线,后面同步、回退都省心。
日常开发:fetch + rebase,别用 pull
开发期间官方主干一直在动,建议养成习惯:每次开始干活前,先把主线同步下来,再把自己的分支"垫"到最新 master 之上:
git fetch upstream git rebase upstream/master很多老手会刻意避开git pull,原因是它把拉取和合并捆在一起执行,容易顺手生成一堆合并提交,把提交历史搅成毛线团;fetch 加 rebase 的组合则保持线性、干净的历史。嫌麻烦的话,可以提前设一次默认行为:
git config branch.autoSetupRebase always这样以后凡是 rebase 场景,Git 都会自动帮你选对。
提交变更,推送分支到 Fork
改动完成后,把它们纳入版本控制:
git add . git commit -m "一句话说明改了什么、为什么改"提交信息是留给审查者的第一份"设计文档",写清楚动机比罗列文件更有用。
- 刚提交完就想微调上一条(补个说明、补个漏改的文件)?
git commit --amend直接改在上一条提交上,不用新开一条噪音提交。 - 分支准备好后推到你 Fork 仓库里对应的远端分支,PR 才有东西可展示:
git push -f origin myfeature这里的-f是把远端分支强制覆盖成本地历史,只作用于你自己 Fork 里的分支,完全安全。千万不要把强推指向官方主干分支——那会用本地历史直接替换远端,后果很难收拾。
创建 PR:GitCode 提交 PR 的正确姿势
打开 Fork 仓库的 Pull Requests 页面,点"+新建 Pull Request":源分支选myfeature,目标分支选官方仓库的 master,填好标题和说明即可。
PR 是一次正式的"合入官方主线"请求,别急着点提交。发之前自己过一遍改动范围,调试代码、无关文件、误提交的产物,一样都不要带进去。
触发 GitCode 门禁,等机器人跑完检查
PR 建好后,在评论区输入/compile,CI 就会被拉起来。机器人会依次跑代码检查、SCA 扫描、反病毒、多平台编译、单元测试等任务:
不同仓库的耗时不太一样,耐心等就行。任何一项 FAILED,点进日志定位问题、修完再推一版新提交,PR 会自动重跑门禁,不用手动重新触发。
门禁全绿之后,PR 会被分给一位或多位审查者。评审意见都集中在 PR 页面,逐条回应、改完推送即可,沟通留痕本身就是贡献的一部分。
踩坑自救:冲突、回退与压缩提交
rebase 冲突:PR 页面上出现冲突标记,说明你的分支和主干改了同一块代码。按这个顺序处理就能解开:
git checkout master git fetch upstream git rebase upstream/master git checkout myfeature git rebase master此时 Git 会停在冲突文件上,手动编辑保留正确内容,然后继续:
git add . git rebase --continue git push -f origin myfeature最后这条强推只更新你自己的 PR 分支,属于正常操作,放心执行。
回退提交:某个已合入主干的提交出了问题,用 revert 生成一条反向提交来安全撤销,它不删除历史,审计链路完整:
git checkout -b myrevert git fetch upstream git rebase upstream/master git revert -m 1 SHA # SHA 是合并提交;普通提交去掉 -m 1 直接 revert git push origin myrevert再拿myrevert发一个 PR 即可。
压缩提交:几条零碎提交想压成一条干净的?交互式变基来办:
git rebase -i HEAD~n # n 是要整理的提交数量编辑界面里把要并入的提交从pick改成s(至少保留一个pick),ESC后输入:wq保存,再按提示编辑合并后的提交信息,保存退出。最后git push -f origin myfeature强推,PR 里的提交历史立刻清爽。
走到这里,整条 GitCode 贡献链路就闭环了:Fork 克隆 → 本地开发与同步 → 提交推送 → 创建 PR → 门禁评审。哪一步卡住了,回到对应小节对照命令排查,基本都能自己解开。
【免费下载链接】community本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息项目地址: https://gitcode.com/cann/community
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考