SVN代码迁移至Gitlab(保留日志)

SVN代码迁移至Gitlab

1.导出SVN提交用户(需要在SVN代码目录执行,并且要在GIT BASH 窗口运行)

svn log --xml | grep "^<author" | sort -u | awk -F '<author>' '{print $2}' | awk -F '</author>' '{print $1}' > userinfo.txt

导出后格式如下:

aaa
bbb
ccc

需要格式化为下面格式(下面命令中指定的 userinfo.txt 就是处理后的SVN账号):

aaa = aaa <aaa @aaa.com>
bbb = bbb <bbb @bbb .com>
ccc = ccc <bbb @bbb .com>

2.拉取SVN代码及日志

主干、分支、标签不是标准名称需要自己指定:

git svn clone SVN路径 --no-metadata --trunk=主干 --tags=tags --branches=branches --authors-file=./userinfo.txt 文件夹(存放拉取代码)

是标准名称(--trunk=trunk --tags=tags --branches=branches),使用 --stdlayout 即可,或 -s:

git svn clone SVN路径 --authors-file=./userinfo.txt  --no-metadata --stdlayout --no-minimize-url  文件夹(存放拉取代码)

我用上面两种方式都不行,拉下来的只有 .git 文件夹,没有代码,最后用的下面命令可以了:

git svn clone SVN路径 --authors-file=./userinfo.txt  --no-metadata --no-minimize-url  文件夹(存放拉取代码)

'--no-minimize-url '参数,意思是不缩小输入地址。

3.目录修改(我当时没有做这个操作也可以,建议做下面操作)

# SVN标签转为GIT标签(如果没有标签可以忽略此步)

cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes/tags

# 修改索引为本地分支

cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes

4.推送代码至GIT服务器(具体参照GITLAB服务器命令操作即可,省略 git init 步骤)

4.1 先在GIT服务器把仓库建好;
4.2 git init 这部可以省略,因为 .git目录已经存在
4.3 git remote add origin GIT仓库地址
4.4 git add .
4.5 git push -u origin master

遇到问题

1.报错:

15:13    Commit failed with error
            0 files committed, 1 file failed to commit: test commit 0820
            On branch master
            Your branch is up to date with 'origin/master'.
            
            nothing to commit, working tree clean

不能正常提交代码,解决:

  运行git config core.ignorecase false,关闭git忽略大小写配置

 2.项目提示 pending

解决:https://blog.csdn.net/weixin_44723434/article/details/88425094

去掉下图配置

原文地址:https://www.cnblogs.com/tangshengwei/p/15167413.html