初衷
为了适应当下的协作开发的节奏, svn的时代渐行渐远, git的操作无疑让开发进度更加快速. 于是乎 svn->git是必然的的, 而且还要带上提交记录, 进行无缝切换.
基本技能
阅读以下操作, 默认你已经具备一下技能和环境:
- Gitee/Github/Gitlab线上仓库(本文已gitee为例)
- HomeBrew(这个可以使用别的, 主要是安装3-5)
- git
- svn
- git-svn(这个是重点)
可选:
- ssh公钥
如果在安装环境和软件过程中, 出现问题, 请自行百度, 这里不做赘述.
步骤概览
- 获取svn所有提交记录的操作者名单, 替换成分配的账号
- git-svn处理, 拉取svn项目,并创建git
- 设置git仓库地址
- 推上去
前提说明
本文意在指导操作步骤, 至于操作细节, 请根据项目实际操作.
我将进行操作, 将以前的多人项目svn移步到我的个人git上.
详细步骤
0. 服务器获取svn提交者记录
找你们的服务器给你一个, 自行需求到满足格式的形式
1. 本地获取svn提交者记录
如果你通过0步骤拿到了, 请忽略
- 本地新建文件夹, 作为处理仓库
- 新建
userinfo.txt
- cd到当前文件夹
git clone svn项目地址
到当前文件夹下- 执行命令:
这里注意,前言中说明了, 这里主要是转移到我的个人仓库, 所以,xxx
的位置需要填写我的仓库邮箱地址
svn log -r 1:HEAD --xml | grep "' '{print $2}' | awk -F '' '{print $1"="$1"<xxx>" }' > userinfo.txt
- 通过上述代码得到所有提交者记录, 并进行了格式化, 可以根据实际情况做映射改动
2. git-svn转换
- 新建一个全新的文件夹, 作为转换的仓库
- 将0或者1获取到的
userinfo.txt
搞到当前文件夹下 cd
到当前文件夹- 执行命令
// xxx为你的svn地址, 请自行填写
git svn clone xxx --no-metadata --authors-file=userinfo.txt
这期间如果出现什么问题, 请自行百度, 大概率是git-svn的安装问题
3. 创建网络仓库
这里采用的是gitee
- 新建一个空仓库, 不需要选择其他的东西,
null null null
- 接下来你会看到仓库的提示, 这里就选择普通的https的模式
4. 配置本地信息
我们继续回到步骤2中新文件夹
此时该文件夹下, 一个项目文件
, 一个userinfo.txt
依次执行一下命令:
// 创建readme文件
1). touch README.md
// git添加提交文件
2). git add README.md
// 这里xxx是步骤3中的https的地址
3). git remote add origin xxx
// 推上去
4). git push -u origin "master"
5. 结束
常见问题
- gitee限制了100M的文件怎么办
这个没办法, 之前有说通过设置上传阈值, 但是估计这种消耗流量的早就被限制了, 这里是做个取巧的操作:
- 根据提示, 查找到大文件, 找到
文件路径
,- 执行命令
git filter-branch --tree-filter 'rm -f xxx文件路径xxx' --tag-name-filter cat -- --all
, 用于删除所有有关大文件的提交记录.- , 通过
分包压缩
(这个普通的zip软件都可以做到), 设置分包压缩的大小<=99M
, 可以压缩出多个对应的压缩包- 可以将原大文件加入忽略文件中
- 在ReadME或者其他的文档中进行说明, 下载项目后要做的解压操作
备注: 我想肯定有人说, 你这个治标不治本, 更何况治标都治不好. 我是觉得, 这个是解决不太关心大文件的提交记录的解决方案, 只是一种取巧方案. 如果想要绝对完美的同学, 请百度寻找插件或者其他解决方案
- 暂时还没有