SVN迁移Git过程碰到的问题和记录

相信大家现在代码管理基本上都用git了,但是其实在很多年前,那个时候还是svn的天下。svn的出现大大的降低了代码管理的难度。

那为什么都2020年了,还要写一篇关于svn迁移git的文章呢,因为公司准备下线svn服务器了,我们项目组还有好多年前的svn代码要没处放了。开发中的项目现在基本了都用git了,但是那些老早前写的,已不维护的代码总要找个安身之处吧,总不能就丢掉吧。

项目组之前迁移svn代码的时候,很多人用的是简单粗暴的迁移方法,就是代码拷贝出来,在git上建项目,然后上传。好处就是简单,没有什么难度,缺点就是之前的commit代码记录都没有了。有时候看看大家代码提交记录还是能收获些什么。

所以做为程序员,怎么能接受这种方式的迁移呢,于是网上搜了一些方法,也找到了,不过千人千面,本人在使用过程中,还是发生了一些“不愉快”,也就是坑,网上找了一圈,有些坑也没有解决方法,只能自己解决。

话不多说,直接上步骤:

  1. 安装git等工具这个就不多说了
  2. 找出所有svn上你们代码提交的user,当然如果你只要保留比如从某个版本到最新版本的提交记录,那只要找出这些版本之间的用户名,网上有打印出用户的方法,我这边是直接找出来,按照如下格式写在了一个txt文件中,比如user.txt
user1=user1A<邮箱地址>
user2=user2A<邮箱地址>

"="左边user1是svn上的用户名称,右边user1A是git上的用户名称,一一对应即可。
放在比如目录:F:\svnback\user.txt下

  1. 运行git-bash.exe,为了确保不会权限问题出错,最好是用管理员运行
  2. 假设我们要上传svn下的工程myproject,svn url为:https://svn.abc.com/type/myproject, 并且在git上创建出这个全新的myproject,路径为: https://g.git.com/type/myproject.git
  3. 在svnback目录下创建全新目录myproject, 形成目录 :F:\svnback\myproject
  4. 在打开git-bash.exe上用cd命令进入到/F/svnback 目录
  5. 然后依次运行
# 从svn目录下获取代码提交记录
#注意 -r 10220:HEAD中的10220根据svn实际的label号填写,如果你要全部commit保留,那么整个"-r 10220:HEAD" 去掉即可
git svn clone  -r 10220:HEAD https://svn.abc.com/type/myproject --no-metadata --authors-file=user.txt myproject
#执行时间取决你的工程的大小,如果很大,这个时间会较长
#如果没有报错,则继续执行后面命令

#进入到myproject目录下
cd myproject

#把刚下载的代码及提交记录添加到对应git上
git remote add origin https://g.git.com/type/myproject.git

#查看添加情况,如果添加成功,用以下命令可以看到添加的结果:
#一般会打印两条添加结果
git remote -v

#为了后面push能成功,我们先pull一下
git pull --rebase origin master

#最后一步,push到git

git push -u origin master

以上步骤如果没有问题,等待相应时间后,最终会成功,并且在git上会有所有的代码提交记录和代码本身,默认是push到master分支

**

常见可能出错的地方:

**

  1. 在user.txt里没有添加全部你要保留的commit里的用户名,中途会失败,添加后重来
  2. 错误:“Authentication Failed”,是在git没有缓存你的用户名密码,如果是windows的话,请打开系统的setting,Credential Manager(凭据管理器),找到Windows Credentials Manager(Windows凭据),找到你的git那个凭据进行修改
  3. 比如麻烦的错误是这个:
 0 [main] perl 18808 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
# 或者是以下这个:
0 [main] perl 12736 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump

我在备份一些大项目时,一直报以上错误,然后也按照网上的解决方法,找到.git/config修改那个文件,添加了相应的行,比如:

[core]
	......
	#添加如下
	hideDotFiles = dotGitOnly
	packedGitLimit = 4000m
    packedGitWindowSize = 4000m
    longpaths = true
[http]
    postBuffer = 1048576000
[pack]
  deltaCacheSize = 2048m
  packSizeLimit = 2048m
  windowMemory = 2048m

然后并没什么用,还是一直报。
最终我的解决方法是升级git,因为我之前一直用提2.10.2,可以打开git version查看,在一些大项目上怎么都不行。
后来升级到:2.28.0 解决了这个问题

再多讲一句,如果中途失败,要重来的话,一种方式是删除myproject目录下的所有文件,包括那个隐藏的.git目录。然后再重新执行一遍。
或者在myproject目录下执行:

#同理-r 10220:HEAD是可选的
git svn fetch -r 10220:HEAD
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值