相关文章推荐
失落的皮蛋  ·  git ...·  3 周前    · 
想发财的苹果  ·  Spring ...·  8 月前    · 
千杯不醉的剪刀  ·  curl: (56) Failure ...·  1 年前    · 

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链接 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