GitHub 工作流程
本文档部分内容来自 Kubernetes github-workflow。

1. 在云端 Fork
- 访问 https://github.com/karmada-io/karmada
- 点击页面右上角的
Fork按钮以创建基于云端的 Fork 仓库。
2. 克隆 Fork 到本地存储
根据 Go 的 工作区指引,请按如下方式将 Karmada 的代码放置在你的 GOPATH 中。
定义本地工作目录:
# 如果你的 GOPATH 包含多个路径,请选择其中一个替代 $GOPATH。
# 必须严格遵循以下目录结构,
# 使用 `$GOPATH/src/github.com/${你的 GitHub 用户名}/` 或其他形式都将无法正常工作。
export working_dir="$(go env GOPATH)/src/github.com/karmada-io"
设置 user 变量,与 GitHub 上的用户名一致:
export user={你的 GitHub 用户名}
上述变量 $working_dir 与 $user 在上图中也有所展示。
克隆你的 Fork 仓库:
mkdir -p $working_dir
cd $working_dir
git clone https://github.com/$user/karmada.git
# 或使用 SSH: git clone git@github.com:$user/karmada.git
cd $working_dir/karmada
git remote add upstream https://github.com/karmada-io/karmada.git
# 或使用 SSH: git remote add upstream git@github.com:karmada-io/karmada.git
# 禁止向上游 master 分支推送
git remote set-url --push upstream no_push
# 验证远程仓库配置是否正确
git remote -v
3. 创建分支
先同步本地 master 分支至最新:
# 根据你使用的仓库
# 注意:部分仓库默认分支可能为 'main' 而非 'master'
cd $working_dir/karmada
git fetch upstream
git checkout master
git rebase upstream/master
基于 master 创建功能分支:
git checkout -b myfeature
然后在 myfeature 分支上进行代码开发。
4. 保持分支同步
# 根据你使用的仓库
# 注意:部分仓库默认分支可能为 'main' 而非 'master'
# 在 myfeature 分支上执行
git fetch upstream
git rebase upstream/master
请勿使用 git pull 替代上述 fetch / rebase 操作。
git pull 默认执行合并操作,可能会引入不必要的合并提交,使提交历史杂乱,违反“每个提交应具备独立意义与可读性”的原则。
你可以通过以下方式修改 .git/config 文件,改变 git pull 的行为:
git config branch.autoSetupRebase always
# 或使用:git pull --rebase
5. 提交代码
提交你的更改:
git commit --signoff
你可能需要多次编辑 / 构建 / 测试代码,可通过 commit --amend 修改上次提交内容。
6. 推送代码
准备好进行评审(或备份工作)后,将你的分支推送至 GitHub:
git push -f ${your_remote_name} myfeature
7. 创建 Pull Request
- 访问你的 Fork 仓库:
https://github.com/$user/karmada - 点击你
myfeature分支旁边的Compare & Pull Request按钮
如你拥有上游仓库的写权限,请勿使用 GitHub 网页 UI 创建 PR, 因为这样会将 PR 分支创建在主仓库,而非你的 Fork 仓库中。
获取代码评审
创建 PR 后,系统会自动分配一名或多名评审人。 评审者将进行全面的代码审查,关注以下方面:
- 正确性
- 潜在 Bug
- 优化建议