Git 协作规范与最佳实践

一、明确分支策略

选择适合团队规模和项目复杂度的分支策略,确保团队有统一的协作规则。

1. Git Flow(适合中大型项目)

分支结构:

  • main:稳定版本,用于发布
  • develop:集成所有功能
  • feature/xxx:开发新功能
  • release/1.0:准备版本发布
  • hotfix/xxx:紧急修复生产环境问题

工作流程:

  1. 新功能从 develop 分支拉取 feature/xxx 分支开发
  2. 开发完成后合并回 develop
  3. 发布版本时从 develop 创建 release/1.0 分支,测试后合并到 maindevelop
  4. 生产环境出问题时,从 main 创建 hotfix/xxx 分支,修复后合并到 maindevelop

2. GitHub Flow(适合小型团队或持续交付)

分支结构:

  • main:始终保持可部署状态
  • feature/xxx:开发新功能

工作流程:

  1. 所有开发从 main 拉取功能分支
  2. 功能完成后发起 Pull Request(PR),合并到 main
  3. 通过 CI/CD 自动部署到生产环境

3. GitLab Flow(适合多环境部署)

分支结构:

  • production:生产环境
  • staging:预发布环境
  • feature/xxx:开发新功能

工作流程:

  1. 功能分支从环境分支拉取
  2. 合并到对应环境分支后自动部署到该环境

二、规范协作流程

1. 任务管理

2. Pull Request(PR)流程

3. 代码提交规范

提交信息格式化:使用 Conventional Commits 规范:

# 提交信息格式
<type>(<scope>): <简短描述>

类型(type):

示例:

feat(auth): 添加 JWT 登录验证
fix(payment): 修复支付失败时的错误提示

4. 标签管理

三、解决常见混乱问题

1. 分支冲突频繁

原因:多人同时修改同一文件的同一部分

解决方案:

2. 提交历史杂乱

解决方案:

3. 任务分配不明确

解决方案:

四、工具推荐

类别 工具 用途
CI/CD GitHub Actions, GitLab CI, Jenkins 自动化测试和部署
代码质量 ESLint, SonarQube 确保代码规范
可视化 GitKraken, SourceTree 直观查看分支和提交历史
文档协作 Confluence, Notion 记录项目规范和设计文档

五、示例:完整工作流

  1. 创建功能分支
    git checkout -b feature/user-profile
  2. 开发与提交
    git add .
    git commit -m "feat(profile): 添加用户资料页面"
  3. 同步主分支
    git fetch origin
    git rebase origin/develop
  4. 推送分支
    git push origin feature/user-profile
  5. 发起 PR:在 GitHub/GitLab 上创建 PR,填写关联的 Issue
  6. 代码审查与合并:审查通过后合并到 develop
  7. 发布版本
    git tag v1.1.0
    git push origin v1.1.0

六、关键原则



建议工作顺序

  1. 规划任务
  2. 编写文档
  3. 创建仓库
  4. 初始化项目结构

七、项目规划与初始化流程

第一步:规划任务

在动手之前,明确项目的目标和范围:

需求分析:

  • 明确项目的核心功能(例如:用户登录、数据存储、API 接口等)
  • 确定技术栈(如 Python + Django、React、Node.js 等)

任务分解:

  • 将项目拆分为多个子任务(例如:用户模块、支付模块、前端页面)
  • 使用看板工具(如 Jira、Trello)或文档记录任务清单

优先级排序:

  • 确定哪些功能是 MVP(最小可行产品)的一部分,哪些是后续扩展

第二步:编写文档

文档是项目的基础,帮助团队统一认知:

文档类型 内容说明 工具示例
项目文档
  • README.md:描述项目目标、技术栈、安装步骤、使用方法
  • 架构图:用文字或绘图工具描述系统模块
Markdown, Draw.io
API 文档 如果涉及接口,使用 Swagger/OpenAPI 格式编写 Swagger UI
开发规范
  • 分支策略:选择 Git Flow 或 GitHub Flow
  • 提交规范:遵循 Conventional Commits
  • 代码风格:定义缩进、命名规则
EditorConfig
部署流程 描述如何构建、测试和部署项目 Docker, CI/CD 文档

第三步:创建 Git 仓库

在规划和文档完成后,初始化 Git 仓库:

本地初始化:

# 创建项目目录并进入
        mkdir my-project && cd my-project

        # 初始化 Git 仓库
        git init

关联远程仓库:

  1. 在 GitHub/GitLab 上创建空仓库
  2. 获取远程地址(如 https://github.com/username/my-project.git

关联本地仓库:

git remote add origin https://github.com/username/my-project.git

提交初始文档:

# 添加 README 和文档文件到暂存区
        git add README.md docs/

        # 提交初始版本
        git commit -m "docs: 初始化项目文档"

        # 推送到远程仓库
        git push -u origin main

第四步:初始化项目结构

根据技术栈创建基础文件结构:

代码目录示例(Python 项目):

my-project/
        ├── docs/              # 文档
        ├── src/               # 源代码
        │   ├── main.py        # 入口文件
        │   └── utils/         # 工具模块
        ├── tests/             # 测试代码
        ├── requirements.txt   # 依赖文件
        └── README.md          # 项目说明

基础配置文件:

  • .gitignore:排除不需要版本控制的文件(如 __pycache__/, .env
  • LICENSE:选择开源许可证(如 MIT、Apache 2.0)
  • .editorconfig:统一代码格式(如缩进、换行符)

第五步:开始开发

创建功能分支:

# 从 main 分支拉取最新代码
        git checkout main
        git pull origin main

        # 创建功能分支
        git checkout -b feature/user-login

开发与提交:

# 开发完成后提交代码
        git add .
        git commit -m "feat(auth): 实现用户登录功能"

        # 推送分支到远程
        git push -u origin feature/user-login

代码审查与合并:

  1. 在 GitHub/GitLab 上发起 Pull Request(PR)
  2. 请求团队成员审查代码
  3. 合并到 main 分支后删除功能分支:
    git branch -d feature/user-login

关键注意事项

事项 说明
文档与代码同步 每次功能开发后更新文档(如 API 变化、新模块说明)
分支管理 遵循分支命名规则(如 feature/xxx, bugfix/xxx
版本控制 定期提交代码并推送到远程仓库,防止数据丢失
自动化测试 配置 CI/CD 工具(如 GitHub Actions)自动运行测试

示例:完整流程

规划任务:

  • 项目:开发一个博客系统
  • 任务分解:用户注册、文章发布、评论功能

编写文档:

  • 创建 README.md, docs/architecture.md, .gitignore

初始化仓库:

mkdir blog && cd blog
        git init
        git remote add origin https://github.com/username/blog.git
        git add . && git commit -m "docs: 初始化项目"
        git push -u origin main

开发功能:

git checkout -b feature/user-registration
        # 开发用户注册功能...
        git add . && git commit -m "feat(auth): 添加用户注册接口"
        git push -u origin feature/user-registration
        # 发起 PR 并合并到 main