SVN仓库优雅地迁移到GIT

需求


  • svn仓库迁移到git
  • 保留commit
  • 用户信息完成映射

环境


  • MacOS
  • svn仓库
  • git仓库

准备


插件安装

brew install git
brew install perl
brew install subversion
brew install git-svn

操作


收集SVN仓库中用户信息

  1. 本地检出$ svn checkout {svn-server}/project_repo
  2. 进入目录$ cd /project_repo
  3. 生成user.txt文件$ svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
  4. 打开并调整user.txt文件 (这个文件就是用户映射,git上邮箱是用户唯一键)
    格式svn名称 = git用户 <git邮箱>
ZhouJielun = 杰伦 <ZhouJielun@163.com>
CyberPunch = 老姜 <cyberpunch@163.com>
...

git-svn命令重新拉取副本

记得带上user.txt!!!
$ git svn clone [svn仓库url] [本地仓库别名] --prefix="" --authors-file=[users.txt文件]
$ cd /{仓库别名}

推到新git仓库(提前把git仓库准备好)

$ git remote add origin [git仓库url]
$ git push origin --all
$ git push origin --tags


其他问题


1.SVN/Core.pm 错误

  • 错误信息
Can't locate SVN/Core.pm in @INC (you may need to install the SVN::Core module)
  • 解决
    $ open -t /usr/local/Cellar/git/{version}/libexec/git-core/git-svn
    用文本工具,替换
    replace #!/usr/bin/perl ==> #!/usr/local/bin/perl

2.如果有svn分支如何提交到Git上

  • 前提
    svn分支是以文件夹形式存在的,需要重新来取一个副本
  • 解决
    参考上述步骤,用git-svn命令重新拉取svn分支的副本
    推到git仓库是略微不同
    $ git remote add origin [git仓库url]
    $ git push origin master:{指定远端分支名称}

参考


git-svn命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Click#593

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值