为了提高团队协作效率、保证代码质量,并充分利用 GitHub 的开源协作特性,我们制定了以下开发流程规范。
推荐使用现代 IDE(如 VS Code, Cursor, Windsurf 或 IntelliJ IDEA)进行开发,并安装 Git 相关插件(例如 GitLens)。 这样可以:
- 自动显示每行代码的最后一次修改记录和修改人。
- 在编辑器内直接查看和对比 commit 记录。
- 更好地处理分支切换和冲突解决。
我们采用经典的分支管理策略,主要包含以下分支类型:
- 定位:稳定版本的代码。
- 规则:
- 任何时候,
main分支的代码都应该是可直接编译和运行的。 - 用户拉取该分支代码后无需额外配置即可使用。
- 禁止直接向
main分支进行git push提交。所有合并必须通过 Pull Request (PR) 并在测试通过后完成。
- 任何时候,
- 定位:日常开发的集成主干。
- 规则:
- 所有的功能开发、Bug 修复合并都首先进入
dev分支。 dev分支应当保持相对稳定,但允许存在尚未发布的新特性。- 定期将测试稳定后的
dev分支合并到main分支。
- 所有的功能开发、Bug 修复合并都首先进入
- 定位:每个开发人员的独立工作区。
- 规则:
- 命名规范推荐为:
姓名首字母/功能简述(例如:zhangsan/fix-agent-bpf)或feature/<feature-name>。 - 修复 Bug 分支:
<username>/<bug-name>或<username>/<bug-name>。 - 文档更新分支:
<username>/<doc-name>。 - 从最新的
dev分支检出。 - 开发完成后,向
dev分支发起 Pull Request (PR)。
- 命名规范推荐为:
为了让 Git 历史清晰易读,在执行 git commit 时,必须遵循格式:
<type>: <subject>
常见 Type 类型:
feat: 新增功能 (Feature)fix: 修复 Bugdocs: 文档变更style: 代码格式修改(不影响逻辑)refactor: 重构(既不是新增功能也不是修复 bug 的代码变动)perf: 性能优化test: 新增或修改测试chore: 构建过程或辅助工具的变动
示例:
feat: 新增 eBPF HTTP2 流量抓取支持fix: 修复 managed 模式下 dispatcher 意外停止的问题docs: 更新测试文档增加 cpu 子命令说明
在开始新功能或修复前,请确保本地代码是最新的:
# 切换到 dev 分支
git checkout dev
# 拉取最新的远程 dev 代码
git pull origin dev
# 创建并切换到个人的开发分支
git checkout -b yourname/feature-name在你的分支上进行代码修改,并遵循良好的 commit 习惯:
- 提交频率:完成一个逻辑小点后即可提交,不要把几天的工作攒成一个巨大的 commit,保持小步快跑。
- 自测要求:提交前确保代码在本地能够编译通过,且基本功能测试正常。
git add .
git commit -m "feat: 你的提交说明"当你完成了当前功能的开发,准备合并代码时:
# 将本地分支推送到 GitHub
git push origin yourname/feature-name然后去 GitHub 仓库页面,针对 dev 分支发起一个 Pull Request (PR)。
PR 填写规范:
- Title: 简明扼要说明 PR 的目的,可与主要 commit 保持一致。
- Description:
- 这个 PR 解决了什么问题?(附上 Issue 链接如果有)
- 主要的代码改动点在哪里?
- 如何进行测试来验证你的代码?
- PR 提交后,请至少邀请 一位团队成员 进行 Review。
- 可以在 GitHub 的 Files changed 面板中逐行审查代码。
- 对于 Reviewer:不仅要看逻辑是否正确,还要关注代码风格、潜在的性能问题和可维护性。
- 如果 Reviewer 提出修改建议,请在本地修改后执行
git commit或git commit --amend,并重新 push,PR 会自动更新。
- 当 Review 获得 "Approve" 批准,并且所有的测试(如果有 CI 流程)通过后,由 Reviewer 或维护者将 PR 合并入
dev分支。 - 合并策略:推荐使用 "Squash and merge",将你的多个开发小 commit 压缩成一个干净的 commit 进入 dev。
- 合并后,可安全删除你的个人开发分支。
- 经过在
dev分支上的一段测试时间后,由核心维护者发起从dev到main的 PR。 - 确保所有的功能都能稳定运行,最终合并到
main作为最新稳定版发布,并可打上对应版本的 Tag。
在开发过程中,如果 dev 分支被其他人更新,导致与你的个人分支产生冲突,请通过 rebase 来解决:
# 切换到 dev 拉取最新代码
git checkout dev
git pull origin dev
# 切换回自己的分支
git checkout yourname/feature-name
# 将自己的修改"变基"到最新的 dev 之上
git rebase dev
# 此时如果有冲突,IDE 会高亮显示。在编辑器中解决冲突后:
git add .
git rebase --continue
# 重复上述过程直到 rebase 成功解决冲突并测试无误后,你可能需要强制推送(如果之前已经 push 过这个分支):
git push -f origin yourname/feature-name- 代码获取:永远基于最新的
dev开发。 - 代码编写:永远在个人分支 (
dev/xxx或feat/xxx) 开发。 - 代码提交:遵循小颗粒度和
Conventional Commits规范。 - 代码合并:永远通过 PR 发起,且必须经过 Code Review。
- 稳定版本:只有完全通过测试的代码才能进入
main分支。
如果在规范建立之前,或者不小心在本地的其他电脑上的旧 main 分支上直接做了修改,且需要接入到现在的标准 dev 流程中,请按照以下方案操作:
如果你的改动对应着远端某个分支上特定的一个或多个 Commit,可以使用 git cherry-pick 将代码“摘取”到新流程中。
-
同步最新标准分支并创建个人分支:
git checkout dev git pull origin dev git checkout -b dev/yourname/migrate-old-feature
-
摘取旧的特定提交: 去 GitHub 上找到你之前那次提交的 Commit Hash(例如
a1b2c3d4)。# 确保本地有远端的最新提交记录 git fetch origin main # 摘取该特定提交的内容应用到当前分支 git cherry-pick a1b2c3d4 # (如果有多个连续提交,可以使用范围摘取:git cherry-pick start_hash^..end_hash)
-
解决冲突并推送提 PR: 如果有冲突,IDE 中解决后执行
git add .和git cherry-pick --continue。完成后直接 push 当前分支并向dev提 PR 即可。
如果你在某台服务器的旧 main 分支写了代码,但是还没有 commit,可以通过 stash 转移:
-
在有改动的机器上暂存修改:
git stash
-
拉取最新的
dev并新建个人分支:git fetch origin dev git checkout origin/dev -b yourname/my-feature
-
将暂存的修改弹出到新的规范分支上:
git stash pop
-
按照标准流程提交:
git add . git commit -m "feat: 迁移旧代码接入标准流程" git push origin yourname/my-feature
然后去 GitHub 仓库页面提 PR。