SVN 迁移到 Git 实操步骤

  • 在代码托管系统上创建空白仓库(不进行初始化)
git@my-git-server:myrepository.git
  • 在 workspace 导出 SVN 提交记录的用户列表
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' >users.txt

编辑 users.txt,映射 Git 用户数据,格式为

username = username <email>
  • 从 SVN 服务器克隆仓库
git svn clone --authors-file=users.txt --no-metadata --stdlayout --prefix="" http://my-project.googlecode.com/svn/ my_project
  • 删除 peg-revision 分支(非必须)
for p in $( git for-each-ref --format='%(refname:short)' | grep "@" ); do
    git branch -D -r $p
done
  • 将 SVN 标签(被 git svn 识别为远程分支)转换为 Git 标签
for t in $( git for-each-ref --format='%(refname:short)' refs/remotes/tags ); do
    git tag ${t/tags\//} $t
    git branch -D -r $t
done
  • 将剩余远程分支转换为本地分支
for b in $( git for-each-ref --format='%(refname:short)' refs/remotes ); do
    git branch $b refs/remotes/$b
    git branch -D -r $b
done
  • 删除 trunk 分支(非必须)
git branch -d trunk
  • 添加远程仓库,推送所有分支与标签
git remote add origin git@my-git-server:myrepository.git
git push origin --all
git push origin --tags

参考:
https://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。