Skip to content

协作流程

概述

团队协作是 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 project

3. 添加上游仓库

bash
git remote add upstream git@github.com:original-author/project.git

4. 创建功能分支

bash
git checkout -b feature/new-feature

5. 开发并提交

bash
git add .
git commit -m "Add new feature"

6. 同步上游更新

bash
git fetch upstream
git rebase upstream/main

7. 推送到 Fork 仓库

bash
git push origin feature/new-feature

8. 创建 Pull Request

在 GitHub 上创建 PR,等待审核和合并。

9. 保持 Fork 更新

bash
git fetch upstream
git checkout main
git merge upstream/main
git push origin main

Fork & Pull 的优点

  • 不需要原始仓库的写权限
  • 每个开发者有独立的仓库空间
  • 适合开源项目协作
  • 便于代码审查

Fork & Pull 的缺点

  • 需要维护 Fork 与上游的同步
  • 工作流程相对复杂
  • 可能产生大量过时的 Fork

共享仓库模型

什么是共享仓库模型

共享仓库模型中,所有团队成员都直接推送到同一个仓库。开发者创建分支进行开发,完成后合并到主分支。

工作流程

共享仓库 (origin)
    ↕ Push/Pull
开发者 A 本地
开发者 B 本地
开发者 C 本地

详细步骤

1. 克隆共享仓库

bash
git clone git@github.com:team/project.git
cd project

2. 创建功能分支

bash
git checkout -b feature/user-auth

3. 开发并提交

bash
git add .
git commit -m "Implement user authentication"

4. 同步主分支

bash
git fetch origin
git rebase origin/main

5. 推送到共享仓库

bash
git push origin feature/user-auth

6. 创建 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

代码审查流程

  1. 创建功能分支
  2. 完成开发和自测
  3. 推送分支并创建 PR
  4. 等待代码审查
  5. 根据反馈修改代码
  6. 获得批准后合并

保持分支更新

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)

  1. 进入仓库 Settings
  2. 选择 Branches
  3. 添加 Branch protection rules
  4. 配置保护规则

代码所有者(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-lease

Bug 修复流程

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 适合开源项目,无需写权限
  • 共享仓库适合团队内部协作,流程简单
  • 遵循分支命名和提交信息规范
  • 使用分支保护确保代码质量
  • 定期同步主分支,减少冲突
  • 小步提交,频繁推送