SVN 迁移到 Git,其实坑还是蛮多的。不过相比较 SVN 来说,Git 还是有挺多优势的,踩这些坑还是值得的。(Tips:阅读本篇博客最好了解下版本管理的一些基本概念和模型,Git 模型点击这里)
下面我们来介绍迁移过程,整个过程大致分为两步:
- 搭建新的版本管理模型
- 旧代码和提交信息的迁移
搭建新的版本管理模型
因为 SVN 和 Git 的版本管理模型不同,而且可能一部分公司在使用 SVN 的过程中模型也不是很规范,所以需要重新搭建 Git 模型,如果之前在 SVN 上的使用的比较规范且模型和 Git 类似,可以直接在第二步(旧代码和提交信息的迁移)上迁移出来的仓库上开发。
我们需要做的操作如下:
1.在 GitLab 上建立一个新的代码仓库,并 clone 远程仓库到本地,文件夹名称为 XXX
2.将需要迁移的最新版本的 SVN 代码(此处是工程的最新版本的代码,并不是 SVN 上对应仓库的全部代码)更新下来,并复制到 XXX 文件下
3.将 XXX 文件下的代码提交,并推送到 Git 远程仓库,然后按照之前的 Git 模型管理即可
以上就是搭建新的版本管理模型的过程,实际上就是将最新的版本的代码按照新模型托管到 Git 服务器上,熟悉基本的 Git 和 SVN 操作就能实现,网上相关的介绍也挺多,这里就不再做详细描述了。另外我们还有 SourceTree、SmartSVN 等神器。
在代码上传过程中如果遇到因为单个文件过大造成的上传失败的问题时,采用 SSH 方式上传即可。
旧代码和提交信息的迁移
下面我们着重介绍旧代码和旧的提交信息的迁移,因为这部分只是用作对历史提交的记录,因此需要新建一个仓库用来存储,而且后续也不在此仓库上开发。
迁移步骤
假设想要将 SVN 项目检出到 myGit 文件夹下
1.在要迁移的文件夹下添加 SVN 用户到 Git 用的映射文件,文件名为:userinfo.txt.
文件内容为:([SVN 上的名字] = [Git 上的名字] <[Git 上的 email]>,下面第一行必需)
1 | VisualSVN Server = Visual SVN Server\<admin@shuhai.com\> |
2.使用 git svn clone 命令克隆一个 Git 版本库,包含 SVN 里面的 trunk、branches 和 tags。
1 | git svn clone <SVN 地址> --no-metadata --authors-file=userinfo.txt --trunk= trunk --tags=tags --branches=branches --ignore-refs=<忽视的分支> gitName |
3.上述步骤成功,则可通过 git log 查看项目提交的历史记录,包括作者,日照,和提交注释信息等,证明 SVN 相应的提交信息已经被克隆到本地仓库
4.将 SVN 上的 tags 分支转为 tags
1 | git tag mobile_1.0.0 tags/mobile_1.0.0 |
5.将多余的 branches 删除掉
1 | git branch -r -d tags/mobile_1.0.0 |
6.列出并检查当前所有分支(此步骤可缺省)
1 | git branch -r |
7.建立 Git 仓库并初始化版本库(克隆后默认初始化,可缺省,若遇到没初始化的情况,请在仓库文件夹下 cd .git 初始化,该文件为隐藏文件)
1 | cd .git |
8.添加远程 Git 服务器地址(建议先在远程建立好对应的仓库)
1 | git remote add origin git@git.shuhai.net:shuhaiios/show.git |
9.使用 git push 命令推送全部的分支和标签信息到 git 服务器上面
1 | git push origin master --tags |
10.推送代码完成后就可以在服务器上看到对应的代码和提交记录了,其他人员就可以克隆使用 Git 仓库了
可能会用到
1.相关 shell 命令
1 | mkdir <filename> 建立文件夹 |
2.ssh 方式使用 git
a.输入命令 cat ~/.ssh/id_rsa.pub 检查本地是否有 SSH Key,如果有可以跳过 b、c 两步
b.输入命令 ssh-keygen -t rsa -C "<git 邮箱>"生成 SSH Key
c.输入命令 cat ~/.ssh/id_rsa.pub 查看 Key 值
d.在 GitLab/GitHub 等 Web 服务页面用户 SSH 设置那里把相应 Key 设置进去
e.愉快的使用 SSH Key 方式使用 Git
遇到的问题
1.提示 Author: VisualSVN Server not defined in userinfo.txt file 错误
解决方法:在 userinfo.txt 添加 VisualSVN Server = Visual SVN Server\admin@yourdomain.com配置即
2.添加远程服务器地址时添加错误
1 | git remote -v 查看当前绑定的远程地址 |
3.错误 Write failed: Broken pipe; git error: pack-objects died of signal 13
同错误 4,采用 ssh 方式上传即可,如果还是不行,重启一下电脑吧,有奇效(据说是终端长时间打开会造成网络连接失败)
4.错误 fatal: The remote end hung up unexpectedly,单个文件过大超出 gitlab 限制
采用 ssh 方式上传即可
5.错误 Warning: Permanently added the RSA host key for IP address ‘222.186.133.56’ to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
ssh 公钥 key 未配置