slug
status
password
icon
AI summary
date
summary
tags
type
category
1.前置条件
1.1.注册gitlab帐号并创建项目
gitlab新建一个仓库(如:sms)存放迁移项目
账号: xxx/xxx@segimail.com
注:
如果注册账号的角色为:Developer,为该仓库为新建空白仓库,没有默认分支,push的时候会有问题。
解决方案:
(1)更改帐号权限,使其有创建默认分支的权限
(2)有创建默认分支权限的人,创建一个默认分支
1.2.svn项目地址和svn帐号密码
地址:https://xxx
账号:xxx/xxx@segimail.com
1.3.导出SVN提交的用户清单
格式为svn_username=git_username,提交记录里出现的所有svn_user都要有对应git_user
在git bash下执行如下命令
#svn log svn项目路径 -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2"="$2" <"$2"邮箱后缀>"}' | sort -u > 要保存的文件路径
如果生成的不满足,修改对应关系即可,后面会用到

2. git帐号配置
配置git信息:
查看配置:
3.从svn拉取代码
3.1本地创建项目,和svn用户清单同级

3.2 拉取代码
Git Bash Here,然后输入
git svn clone -r 282506:HEAD svn_url --no-metadata -A userinfo_path local_path
- r 282506:HEAD 代表从svn的282506版本到最新版本的提交记录,避免从第一个版本拉取数据量过大,操作耗时高。 如果需要拉取所有记录,可去除 -r 282506:HEAD
svn_url 你的svn项目地址。
- no-metadata 防止git拉取无用的SVN附加信息
local_path 为git clone下来的svn目录,会自动新建
- A userinfo_path 你的svn2git.txt路径
注:
- 第一次操作,会多次要求账号密码:请注意每次提示信息,第一次密码输入是操作系统的用户密码,第二次为svn账号和密码,第三次为git的账号密码。注意按提示输入。
- 拉取代码(项目越大,花费时间越多),此处会用到第一步获取的svn用户清单
- 出现文件找不到,乱码等-(refs/remotes/git-svn) *** was not found in commit,
修改拉取屏蔽这个文件:git svn clone --ignore-paths="(.txt|.xlsx)$" "svn地址" "本地路径"
- Software caused connection abort at C:/Program Files (x86)/Git/mingw32/share/perl5/Git/SVN/Ra.pm 第 312 行
修改SVN Server 的
http.conf中设置更高的服务器超时按照建议简单地附加 Timeout 1800;(如果这部分提交记录不重要)也可以修改git svn clone -r 282506:HEAD,跳过这个修订的版本4. 提交代码到本地仓库
4.1. 项目总大小不大于50M:
执行可查看关联情况
关联ok的

如果关联错了,可以使用 git remote rm origin删除错位关联后重新关联即可
如果在gitee上建的仓库上有.gitignore文件,需要先rabase,但因项目过大,多次rebase都卡住了,所以清空了远程的仓库,不执行rebase
(如果code = 411,则是由postBuffer引起的,可以在客户端执行
git config --global http.postBuffer 52428800,改为最大50M)4.2. 项目总大小大于50M:
项目文件过大,超过http实体最大值(50M),需要换成ssh传输,错误提示:
需要换成ssh传输
如果已经生成了就不用下面的命令生成
这个命令需要自己输入,直接复制粘贴会导致错误
将生成的公钥,复制到你的gitee ssh公钥设置
测试是否能用ssh登录git
出现下面提示则成功
修改提交操作
5. push代码到远端
6.总结整体流程
7.问题
7.1 remote: Ask a project Owner or Maintainer to create a default branch:
申请把gitlab帐号的角色改成Maintainer或者让有权限的用户创建默认分支
7.2 fatal: remote origin already exists.
解决办法如下:
1、先输入 git remote rm origin
2、再输入 git remote add origin https://github.com/(user_name)/(app_name).git 就不会报错了!
3、如果输入 git remote rm origin 还是报错的话,error: Could not remove config section 'remote.origin'. 我们需要修改gitconfig文件的内容
4、找到你的github的安装路径 C:\Users\xxx\PortableGit_054f2e797ebafd44a30203088cd3d58663c627ef\etc
5、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那三行删掉就好了!
7.3 git svn - was not found in commit
解决方案:
- 奇怪的文件,直接屏蔽,--ignore-paths regexp (忽略指定的文件类型)
- 在有问题的版本之前重置到一个版本,git svn reset
- 在 Windows 上遇到与文件名中的特殊字符(此处:元音变音)相关的相同错误,临时设置环境变量,
7.4 'fatal: Couldn't find remote ref master'
解决方案:
1.该问题是由于某些单个修订非常大并且需要 10 多分钟才能下载。他们不会在 Apache 服务器超时和切断连接之前完成。
解决方案是在 SVN Server 的
http.conf中设置更高的服务器超时按照建议简单地附加
Timeout 18002.修改拉取git svn clone的-r 282506:HEAD,改到这个修订之后的版本号,放弃这个(如果需要这部分记录,则必须用上面的方法)。
8.相关资料
[详解]You won‘t be able to pull or push repositories via SSH until you add an SSH key to your profile)