最近项目代码计划从 SVN 切换到 Gitlab,研究了下可以把 SVN 的 commit 也迁移到 Git 中,这样方便了很多。
系统环境
我的操作环境是 Ubuntu 16.04 64位,系统语言是简体中文。
安装配置 Git
此处使用 apt-get 安装 git,也可以从源码编译安装。
sudo apt-get install git
全局配置 git 账户
git config --global user.name "cikai"
git config --global user.email "cikai0923@foxmail.com"
生成 SSH 密钥
ssh-keygen -r rsa -C "cikai0923@foxmail.com"
一路回车,最终生成了 id_rsa.pub 公钥文件,复制里面的内容,填写到 Gitlab 中即可。
vim ~/.ssh/id_rsa.pub
安装配置 Subversion
Ubuntu 上非常方便的SVN工具,此处继续使用 apt-get 安装。
sudo apt-get install subversion
git-svn 工具
这里用到了 Ubuntu 下的一个 git 工具叫 git-svn,通过 apt-get 安装即可。
sudo apt-get install git-svn
下载 SVN 项目代码
svn checkout http://host:port/svn/branches/test_project_svn
列出 SVN 工程中所有提交者的信息
svn log --xml | grep author | sort -u | perl -pe 's/.>(.?)<.>
上面的命令会得到一下结果:
CiKai
Tom
Jerry
将 SVN 的用户格式手动改写成 Git 格式
手动修改成下面的格式,并保存在 users.txt 文件中。
注意:等号左边是 SVN 用户名,右边是 Gitlab 用户名,有时两个名称并不一致。
重新下载代码,进行 SVN commit 向 Git 的转换
git svn clone --no-metadata -A users.txt http://host:port/svn/branches/test_project_svn test_project_git
这里工具会自动完成转换,需要等待片刻。
关联远程 Git 仓库,提交代码
上一步完成后,新工程文件夹 test_project_git 自动创建一个空的 Git 工程,默认 master 分支。
关联远程 Git 仓库:
git remote add origin ssh://git@host:port/git/test_project_git.git
创建本地 develop 分支:
git checkout -b develop
拉取远程 develop 分支,并和本地 develop 分支代码合并:
git pull origin develop
这里需要手动完成 Merge 信息的处理,保存。
提交代码到远程 Git 仓库:
git push -u origin develop
至此,我们完成了 SVN commit 向 Git 的迁移工作。