与《SVN迁移至GitLab,并附带历史提交记录》用的 git svn clone
不同,本文使用svn2git来迁移项目代码。
git config --global user.name "XXX"
git config --global user.email "XXX@mail.com"
可通过命令git config -l 查看结果
git-svn
,运行git svn -h
,若正常输出帮助信息,说明安装没问题。ruby
,运行ruby -h
,若正常输出帮助信息,说明安装没问题。gem install svn2git
再运行svn2git -h
,若正常输出帮助信息,说明安装没问题。
svn1=git1<git1@mail.com>
svn2=git2<git2@mail.com>
svn3=gitx<gitx@mail.com>
注意:
- 需要将涉及到的同步记录中的用户都做映射,否则在同步时可能会报错
- 对于无法对应的人员,如离职人员,有SVN账号,但是没有现在的GIT账号,保险起见,可以采用无关紧要的账号进行对应,或者单独建一个账号也可以,例如使用的test账号进行标识的
│ userinfo.txt
└─ MyProject
svn2git svnUrl --authors userinfo.txt -v
这里的
-v
会输出执行过程的信息,方便debug。此处的 -r 12345:HEAD 表示从svn的12345版本到最新版本的提交记录,避免拉取所有数据量过大,操作耗时高。svnurl是svn项目地址。如果需要拉取所有记录,可去除 -r 12345:HEAD
如果在windows有下面错误:
D:\MyProject>svn2git https:/xxx.com:8443/svn/SVN2GIT/ --authors authors.txt -v
Running command: git svn init --prefix=svn/ --no-metadata --trunk='trunk' --tags='tags' --branches='branches' https:/xxx.com:8443/svn/SVN2GIT/
Initialized empty Git repository in D:/MyProject/.git/
Running command: git config --local --get user.name
Running command: git config --local svn.authorsfile authors.txt
Running command: git svn fetch
Running command: git branch -l --no-color
Running command: git branch -r --no-color
Running command: git config --local --get user.name
Running command: git config --local --get user.email
Running command: git checkout -f master
error: pathspec 'master' did not match any file(s) known to git
command failed:
git checkout -f master
去安装目录C:\Ruby30-x64\lib\ruby\gems\3.0.0\gems\svn2git-2.4.0\lib\svn2git
,找到migration.rb
文件,把#{trunk}
、 #{tag}
、#{branch}
两边的单引号删除,再重新执行上面命令。
参考自:svn2git - command failed
cd MyProject
git remote add origin gitURL
如:git remote add origin http://192.168.1.xx:5678/MyProject.git
git remote -v
git remote rm origin
git pull --rebase origin master
git push -u origin master
执行命令后,可能会弹窗要求输入Git的账号和密码