SVN项目迁移到GIT并保留commit记录
迁移一个SVN项目(大小约为2G)到Gitee上,本文记录操作过程
1. 编辑userinfo.txt
格式为svn_username=git_username,提交记录里出现的所有svn_user都要有对应git_user
svn_user1=svn_user1<svn_user1@xxx.com>
svn_user2=svn_user2<svn_user2@xxx.com>
2. 从svn拉取代码
配置git信息:
git config --global user.name "YOUR_USERNAME"
git config --global user.email "YOUR_EMAIL"
查看配置:
git config --list
拉取代码(项目越大,花费时间越多)
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 你的userinfo.txt路径
3. 提交代码到git
a. 项目总大小不大于50M:
cd localpath
git remote add origin https://gitee.com/xxx/xxx.git
查看关联情况:
git remote -v
如果关联有误,可以删除关联
git remote rm origin
在gitee上建的仓库上有.gitignore文件,需要先rabase,但因项目过大,多次rebase都卡住了,所以清空了远程的仓库,不执行rebase
git pull --rebase origin master
(如果code = 411,则是由postBuffer引起的,可以在客户端执行
git config --global http.postBuffer 52428800
,改为最大50M)
b. 项目总大小大于50M:
项目文件过大,超过http实体最大值(50M),需要换成ssh传输,错误提示:
Enumerating objects: 2598, done.
Counting objects: 100% (2598/2598), done.
Delta compression using up to 4 threads
error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413
Compressing objects: 100% (2239/2239), done.
error: pack-objects died of signal 201.80 MiB | 1.60 MiB/s
fatal: the remote end hung up unexpectedly
需要换成ssh传输
这个命令需要自己输入,直接复制粘贴会导致错误
ssh-keygen –t rsa –C "YOUR_EMAIL"
cat ~/.ssh/id_rsa.pub
将生成的公钥,复制到你的 gitee ssh公钥设置
测试是否能用ssh登录git
ssh -T git@gitee.com
出现下面提示则成功
Hi <YOUR_USERNAME>! You've successfully authenticated, but GITEE.COM does not provide shell access.
将git链接 https:// gitee.com/xxx/xxx.git 对应修改成 @gitee.com:xxxx/xxx.git(其他git同理)
git remote set-url origin git@gitee.com:xxxx/xxx.git
4. push代码到远端
git push -u origin master
操作实例
git config --global user.name "zhanghan"
git config --global user.email "zhanghan@gdyd.com"
git svn clone --no-metadata -A userinfo.txt https://10.66.0.1/eip-ng/branches/eip-docx docx