Appearance
协作流程
概述
团队协作是 Git 版本控制的核心应用场景。选择合适的协作流程可以提高团队效率、减少冲突、保证代码质量。本文将介绍主流的 Git 协作模型和最佳实践。
Fork & Pull 模型
什么是 Fork & Pull
Fork & Pull 是开源项目中最常用的协作模型。开发者首先 Fork 项目到自己的账户,在 Fork 的仓库中进行开发,然后通过 Pull Request 将改动提交给原始仓库。
工作流程
原始仓库 (upstream)
↓ Fork
个人仓库 (origin)
↓ Clone
本地仓库
↓ Push
个人仓库 (origin)
↓ Pull Request
原始仓库 (upstream)详细步骤
1. Fork 项目
在 GitHub/GitLab 上点击 Fork 按钮,将项目复制到个人账户。
2. 克隆 Fork 的仓库
bash
git clone git@github.com:your-username/project.git
cd project3. 添加上游仓库
bash
git remote add upstream git@github.com:original-author/project.git4. 创建功能分支
bash
git checkout -b feature/new-feature5. 开发并提交
bash
git add .
git commit -m "Add new feature"6. 同步上游更新
bash
git fetch upstream
git rebase upstream/main7. 推送到 Fork 仓库
bash
git push origin feature/new-feature8. 创建 Pull Request
在 GitHub 上创建 PR,等待审核和合并。
9. 保持 Fork 更新
bash
git fetch upstream
git checkout main
git merge upstream/main
git push origin mainFork & Pull 的优点
- 不需要原始仓库的写权限
- 每个开发者有独立的仓库空间
- 适合开源项目协作
- 便于代码审查
Fork & Pull 的缺点
- 需要维护 Fork 与上游的同步
- 工作流程相对复杂
- 可能产生大量过时的 Fork
共享仓库模型
什么是共享仓库模型
共享仓库模型中,所有团队成员都直接推送到同一个仓库。开发者创建分支进行开发,完成后合并到主分支。
工作流程
共享仓库 (origin)
↕ Push/Pull
开发者 A 本地
开发者 B 本地
开发者 C 本地详细步骤
1. 克隆共享仓库
bash
git clone git@github.com:team/project.git
cd project2. 创建功能分支
bash
git checkout -b feature/user-auth3. 开发并提交
bash
git add .
git commit -m "Implement user authentication"4. 同步主分支
bash
git fetch origin
git rebase origin/main5. 推送到共享仓库
bash
git push origin feature/user-auth6. 创建 Pull Request
创建 PR 进行代码审查。
7. 合并后清理分支
bash
git checkout main
git pull origin main
git branch -d feature/user-auth
git push origin --delete feature/user-auth共享仓库的优点
- 工作流程简单直接
- 便于团队协作
- 分支管理集中
- 适合小到中型团队
共享仓库的缺点
- 需要仓库的写权限
- 可能产生分支冲突
- 需要严格的分支管理规范
协作最佳实践
分支命名规范
bash
feature/user-authentication
bugfix/login-error
hotfix/security-patch
release/v1.2.0
docs/api-documentation
refactor/database-layer提交信息规范
使用约定式提交:
bash
feat: add user authentication feature
fix: resolve login timeout issue
docs: update API documentation
style: format code with prettier
refactor: restructure database layer
test: add unit tests for auth module
chore: update dependencies代码审查流程
- 创建功能分支
- 完成开发和自测
- 推送分支并创建 PR
- 等待代码审查
- 根据反馈修改代码
- 获得批准后合并
保持分支更新
bash
git fetch origin
git rebase origin/main小步提交
bash
git add src/auth.js
git commit -m "feat: implement login validation"
git add src/user.js
git commit -m "feat: add user session management"使用 Pull Request 模板
创建 .github/pull_request_template.md:
markdown
## 变更描述
描述本次变更的内容
## 变更类型
- [ ] 新功能
- [ ] Bug 修复
- [ ] 重构
- [ ] 文档更新
## 测试
- [ ] 已添加单元测试
- [ ] 已进行手动测试
## 相关 Issue
Closes #123权限管理
GitHub 权限级别
| 级别 | 权限 |
|---|---|
| Read | 查看仓库、克隆、创建 Issue |
| Triage | 管理 Issue 和 PR |
| Write | 推送代码、合并 PR |
| Maintain | 管理仓库设置 |
| Admin | 完全控制权限 |
GitLab 权限级别
| 级别 | 权限 |
|---|---|
| Guest | 查看、创建 Issue |
| Reporter | 查看代码、拉取仓库 |
| Developer | 推送分支、合并请求 |
| Maintainer | 管理分支保护、设置 |
| Owner | 完全控制权限 |
分支保护规则
在 GitHub/GitLab 设置分支保护:
- 禁止强制推送
- 禁止删除分支
- 要求 PR 审核
- 要求 CI 通过
- 要求签名提交
设置分支保护(GitHub)
- 进入仓库 Settings
- 选择 Branches
- 添加 Branch protection rules
- 配置保护规则
代码所有者(CODEOWNERS)
创建 .github/CODEOWNERS 文件:
/src/auth/ @team-auth
/src/api/ @team-api
/docs/ @team-docs
*.js @team-frontend
*.py @team-backend团队协作工作流示例
功能开发流程
bash
git checkout main
git pull origin main
git checkout -b feature/new-feature
git add .
git commit -m "feat: add new feature"
git push origin feature/new-feature
git fetch origin
git rebase origin/main
git push origin feature/new-feature --force-with-leaseBug 修复流程
bash
git checkout main
git pull origin main
git checkout -b bugfix/issue-123
git add .
git commit -m "fix: resolve issue #123"
git push origin bugfix/issue-123紧急修复流程
bash
git checkout main
git pull origin main
git checkout -b hotfix/critical-security-fix
git add .
git commit -m "fix: patch security vulnerability"
git push origin hotfix/critical-security-fix
git checkout main
git merge hotfix/critical-security-fix
git push origin main
git push origin --delete hotfix/critical-security-fix总结
- Fork & Pull 适合开源项目,无需写权限
- 共享仓库适合团队内部协作,流程简单
- 遵循分支命名和提交信息规范
- 使用分支保护确保代码质量
- 定期同步主分支,减少冲突
- 小步提交,频繁推送
