场景描述
项目:开发一个博客系统,包含用户登录、文章发布和评论功能。
团队:3 名开发者(Alice、Bob、Charlie),使用 GitHub 作为代码托管平台,GitHub Actions 作为 CI/CD 工具。
目标:实现用户登录功能,并确保代码高质量、高效协作。
1. 项目初始化与规范设定
为了确保团队协作高效,项目开始时需要设定 Git 规范和仓库结构。
创建仓库:
Alice 在 GitHub 上创建仓库 blog-system。
初始化本地仓库:
git init blog-system cd blog-system
设置 .gitignore:
创建 .gitignore 文件,排除无关文件(如 node_modules, .env):
node_modules/ .env dist/ *.log
初始化主分支:
创建初始文件(如 README.md, package.json),提交并推送:
git add . git commit -m "chore: initialize project with README and .gitignore" git branch -M main git remote add origin https://github.com/team/blog-system.git git push -u origin main
设定分支保护规则:
在 GitHub 上设置 main 分支保护:
要求 Pull Request (PR) 审查。
要求通过 CI 测试才能合并。
团队规范:
约定分支命名:feature/<功能名>, bugfix/<问题编号>, hotfix/<问题描述>。
提交信息规范:使用 Angular 风格,如 feat: add login endpoint, fix: resolve login bug #123。
文档化规范:在 README.md 或 GitHub Wiki 中记录。
2. 功能开发:
用户登录Alice 负责开发用户登录功能(前端页面 + 后端 API),Bob 负责代码审查,Charlie 配置 CI/CD。步骤:
创建特性分支:
Alice 创建并切换到新分支:
git checkout -b feature/user-login
开发代码:
Alice 开发前端登录页面(React)和后端 API(Node.js)。
提交代码(小步提交):
# 提交前端代码 git add src/components/Login.js git commit -m "feat: add login page UI" # 提交后端代码 git add src/api/auth.js git commit -m "feat: add login endpoint with JWT"
同步远程代码:
为避免冲突,Alice 定期拉取 main 分支更新:
git checkout main git pull origin main git checkout feature/user-login git rebase main
如果有冲突,解决后继续:
git rebase --continue
推送分支:
开发完成后,推送到远程:
git push origin feature/user-login
3. 代码审查与质量控制
Alice 提交 Pull Request,Bob 进行审查,Charlie 配置自动化测试。步骤:
创建 Pull Request:
Alice 在 GitHub 上创建 PR,从 feature/user-login 到 main。
PR 标题:Add user login functionality。
PR 描述:列出功能点、测试方法和相关 issue(如 #123)。
代码审查:
Bob 检查代码,重点关注:
代码规范(是否符合 ESLint 规则)。
功能完整性(登录是否支持多种场景,如错误处理)。
安全性(密码加密、JWT 验证)。
Bob 提出建议,例如“在 Login.js 中添加输入验证”。
Alice 修改代码并提交:
git add src/components/Login.js git commit -m "fix: add input validation to login form" git push origin feature/user-login
自动化检查:
Charlie 配置 GitHub Actions,自动运行测试和 lint:
name: CI on: pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: '16' - run: npm install - run: npm test - run: npm run lint
如果测试失败,Alice 修复问题并重新提交。
合并 PR:
测试通过,Bob 批准 PR,Alice 合并到 main:
bash
git checkout main git pull origin main git merge feature/user-login git push origin main
删除分支:
bash
git push origin --delete feature/user-login git branch -d feature/user-login
4. 版本控制与回滚
假设合并后发现登录 API 有 bug(例如 JWT 过期时间错误),需要快速修复。步骤:
创建修复分支:
Alice 创建修复分支:
git checkout -b hotfix/jwt-expiry
修复并提交:
修改 src/api/auth.js,调整 JWT 过期时间。
提交:
git add src/api/auth.js git commit -m "fix: correct JWT expiry time" git push origin hotfix/jwt-expiry
PR 和合并:
创建 PR,Bob 审查,CI 测试通过后合并到 main。
打标签:
为修复后的版本打标签:
git tag v1.0.1 git push origin v1.0.1
回滚(如果需要):
如果修复失败,可回滚到上一个稳定版本:
git revert <commit-hash> git push origin main
5. 提高效率的工具与技巧
团队使用以下方法优化 Git 使用:
Git 别名:
Alice 配置别名,简化常用命令:
git config --global alias.st status git config --global alias.cm "commit -m" git config --global alias.br branch
示例:git st 查看状态,git cm "fix: update code" 快速提交。
交互式 Rebase:
Alice 在提交 PR 前整理提交历史,合并琐碎提交:
git rebase -i HEAD~3
将多个提交合并为一个清晰的提交,如 feat: complete login functionality。
Git Hooks:
Charlie 配置 pre-commit 钩子,自动运行 ESLint 和单元测试:
bash
# .git/hooks/pre-commit #!/bin/sh npm run lint npm test
可视化工具:
Bob 使用 VS Code 的 Git 插件,查看差异和提交历史。
Charlie 使用 GitKraken 可视化分支结构,快速切换分支。
6. 部署与持续集成
Charlie 配置 CI/CD 管道,自动部署到生产环境。
配置 GitHub Actions:
部署到 AWS:
name: Deploy on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Deploy to AWS run: | aws s3 sync ./dist s3://blog-system-bucket
验证部署:
部署后,团队测试登录功能,确保生产环境正常。
7. 常见问题应对
合并冲突:
假设 Bob 的 feature/comments 和 Alice 的 feature/user-login 冲突:
git checkout feature/user-login git merge feature/comments # 手动解决冲突 git add . git commit
误删代码:
使用 git reflog 找回丢失的提交:
git reflog git reset --hard <commit-hash>
调试问题:
使用 git bisect 定位引入 bug 的提交:
bash
git bisect start git bisect bad git bisect good v1.0.0