成功最有效的方法就是向有经验的人学习!

SVN代码仓迁移到gitlab

把SVN上的代码仓库迁移到Gitlab上,实际上就是把SVN仓库转变成Git仓库,并且希望能保留原SVN仓库的Commit等历史记录,这一点很重要。
SVN迁移到Gitlab需要安装git-svn

yum install -y git-svn

保留原SVN仓库的Commit等历史记录,需要获取到SVN使用的作者名字列表,为了获得 SVN 使用的作者名字列表,可以在checkout到本地的仓库路径下运行这个:

svn co --username devuser --password 1234567 https://CODESVR01.test.com/svn/test.com/ sitecode
cd sitecode
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > /tmp/users.txt

这会将日志输出为 XML 格式,然后保留作者信息行、去除重复、去除 XML 标记。 然后,将输出重定向到你的 users.txt 文件中,这样就可以在每一个记录后面加入对应的 Git 用户数据,修改users.txt文件满足以下的格式:

# vim /root/users.txt
schacon = schacon <schacon@geemail.com>
selse =  selse <selse@geemail.com>

然后开始把SVN仓库转变成Git仓库,执行以下命令:

# git svn clone http://my-project.googlecode.com/svn/   --authors-file=/root/users.txt  --no-metadata  my_project

如果svn服务器的操作很不规范,很随意(如果分支不规范,tags不规范,有空目录,有奇葩文件名等等),就不要执行以下两步了
为了将标签变为合适的 Git 标签,运行

# cd  my_project
# cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
# rm -Rf .git/refs/remotes/origin/tags

这会使原来在 remotes/origin/tags/ 里的远程分支引用变成真正的(轻量)标签。

接下来,将 refs/remotes 下剩余的引用移动为本地分支:

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

可以直接跳到这一步继续执行,等上传到gitlab后以后再整理目录
现在所有的旧分支都是真正的 Git 分支,并且所有的旧标签都是真正的 Git 标签。 最后一件要做的事情是,将你的新 Git 服务器添加为远程仓库并推送到上面。 下面是一个将你的服务器添加为远程仓库的例子:

# git remote add origin git@my-git-server:myrepository.git

因为想要上传所有分支与标签,你现在可以运行:

$ git push origin --all

通过以上漂亮、干净地导入操作,你的所有分支与标签都应该在新 Git 服务器上,你可以去gitlab上查看结果了。

赞(4) 打赏
未经允许不得转载:陈桂林博客 » SVN代码仓迁移到gitlab

大佬们的评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    参考资料:https://git-scm.com/book/zh/v2/Git-%E4%B8%8E%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F-%E8%BF%81%E7%A7%BB%E5%88%B0-Git

    admin2年前 (2020-05-29)回复

全新“一站式”建站,高质量、高售后的一条龙服务

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏