前言

为了适应当下的协作开发的节奏, svn的时代渐行渐远, git的操作无疑让开发进度更加快速。 于是乎 svn->git是必然的的, 而且还要带上提交记录, 进行无缝切换。

基本技能

阅读以下操作, 默认你已经具备一下技能和环境:

  1. Gitee/Github/Gitlab线上仓库(本文已gitee为例)
  2. HomeBrew(这个可以使用别的, 主要是安装3-5)
  3. git
  4. svn
  5. git-svn(这个是重点)

可选:

ssh公钥

如果在安装环境和软件过程中, 出现问题, 请自行百度, 这里不做赘述。

步骤概览

  1. 获取svn所有提交记录的操作者名单, 替换成分配的账号
  2. git-svn处理, 拉取svn项目,并创建git
  3. 设置git仓库地址
  4. 推送上去

前提说明

本文意在指导操作步骤, 至于操作细节, 请根据项目实际操作。
我将进行操作, 将以前的多人项目svn移步到我的个人git上。

详细步骤

服务器获取svn提交者记录

找你们的服务器给你一个, 自行需求到满足格式的形式

本地获取svn提交者记录

如果你通过5.1步骤拿到了, 请忽略

  • 本地新建文件夹, 作为处理仓库

  • 新建userinfo.txt

  • cd到当前文件夹

  • git clone svn项目地址 到当前文件夹下

  • 执行命令:
    这里注意,前言中说明了, 这里主要是转移到我的个人仓库, 所以, xxx的位置需要填写我的仓库邮箱地址

    1
    svn log -r 1:HEAD --xml | grep "' '{print $2}' | awk -F '' '{print $1"="$1"<xxx>" }'  > userinfo.txt
  • 通过上述代码得到所有提交者记录, 并进行了格式化, 可以根据实际情况做映射改动

git-svn转换

  • 新建一个全新的文件夹, 作为转换的仓库
  • 将5.1或者5.2获取到的userinfo.txt复制到当前文件夹下
  • cd到当前文件夹
  • 执行命令
    1
    2
    // xxx为你的svn地址, 请自行填写
    git svn clone xxx --no-metadata --authors-file=userinfo.txt
    这期间如果出现什么问题, 请自行百度, 大概率是git-svn的安装问题

创建网络仓库

这里采用的是gitee

  • 新建一个空仓库, 不需要选择其他的东西, null null null
  • 接下来你会看到仓库的提示, 这里就选择普通的https的模式

配置本地信息

我们继续回到步骤5.2中新文件夹
此时该文件夹下, 一个项目文件, 一个userinfo.txt

依次执行一下命令:

1
2
3
4
5
6
7
8
9
10
11
(1) 创建readme文件
touch README.md

(2) git添加提交文件
git add README.md

(3) 这里xxx是步骤3中的https的地址
git remote add origin xxx

(4) 推送上去
git push -u origin "master"