从 SVN 迁移到 Git 后,分支管理应从“目录拷贝”模式转变为“指针引用”模式,推荐采用 Git Flow 或简化版主干开发流,重点在于保护主分支并规范功能分支的生命周期。
先说结论:迁移不仅是工具替换,更是协作流程的重构,需重新定义分支角色并配置权限保护。
- 适合:团队规模超过 5 人且并行开发任务较多的场景
- 先准备:梳理现有 SVN 目录结构并建立作者映射表
- 建议:禁止直接推送代码到主分支,强制通过合并请求审核
核心策略调整
SVN 的分支本质是服务器上的目录拷贝,切换和合并开销大,导致团队倾向于少建分支。Git 的分支是轻量级指针,创建和切换几乎瞬时完成,这使得频繁创建短期功能分支成为可能。
迁移后如果继续沿用 SVN 的“主干 + 少量分支”模式,无法发挥 Git 分布式协作的优势,也无法满足代码审查和灰度发布的需求。
分支模型定义
参考常见实践,至少区分以下分支类型:
- master/main:生产环境代码,仅允许通过 release 分支合并
- develop:日常开发集成分支,开发人员基于此创建功能分支
- feature:功能开发分支,完成后合并回 develop
- release:发布准备分支,用于测试和灰度
- hotfix:紧急修复分支,基于 master 创建
平台分支保护配置
在 Git 服务器端设置保护规则,禁止开发人员直接 push 到 master 或 develop 分支,强制使用 Merge Request 或 Pull Request 流程。
GitLab 配置步骤:
- 进入项目 Settings -> Repository -> Protected Branches。
- 选择 Branch 为 master 或 develop。
- Allowed to merge 设置为 Maintainers。
- Allowed to push 设置为 No one 或 Maintainers。
- 勾选 Allow force push 为未选中状态。
GitHub 配置步骤:
- 进入项目 Settings -> Branches -> Add branch protection rule。
- Branch name pattern 填写 master 或 develop。
- 勾选 Require pull request reviews before merging。
- 勾选 Require status checks to pass before merging。
- 勾选 Include administrators 以强制所有人员遵守。
迁移历史与作者映射
迁移时必须保留作者信息,否则提交记录将显示为 SVN 用户名而非真实身份。需提前准备 users.txt 映射文件:
zhangsan = 张三 <zhangsan@company.com>
lisi = 李四 <lisi@company.com>使用 svn2git 进行迁移,确保 trunk 对应 master,branches 对应本地分支。示例命令:
svn2git http://svn.example.com/repo `--authors-file`=users.txt `--metadata`常用命令速查
# 创建功能分支
git checkout -b feat/new-feature develop# 合并分支并删除
git merge `--no-ff` feat/new-feature
git branch -d feat/new-feature# 推送远程分支
git push origin feat/new-feature怎么验证是否生效
1. 检查分支结构:使用 git branch -a 确认远程分支已正确映射,tags 不再是目录而是标签对象。
2. 检查提交历史:使用 git log 查看作者信息是否已转换为标准 Git 格式(姓名 + 邮箱)。
3. 测试权限控制:尝试直接向受保护分支推送代码,确认是否被服务器拒绝。
4. 分支清理检查:使用以下命令检查是否存在残留的 SVN 风格分支:
git branch -a | grep -E 'tags|trunk'常见坑
1. 标签与分支混淆
SVN 的 tags 也是目录,迁移后容易变成远程分支。需手动或脚本将其转换为 Git 标签对象。
2. 忽略作者映射
若未配置 authors-file,Git 历史中的提交者将显示为 SVN 账号和主机名,导致责任追溯困难。
3. 权限体系差异
SVN 支持路径级权限,Git 通常是仓库级或分支级。迁移后需重新规划权限粒度,避免过度授权。
参考文档
- GitLab Protected Branches Documentation
- GitHub Branch Protection Rules Documentation
- Official Git SVN Migration Guide
原文链接:https://www.zjcp.cc/ask/11129.html
