还在使用 SVN 的企业,如何快速迁移到 Gitee
前言
关于使用 Git 还是 SVN 进行版本控制的讨论一直存在,Git 和 SVN 的区别也十分明显:
Git | SVN |
Git 是分布式的 | SVN 是集中式的 |
复杂概念多、命令多,功能多 | 简单易上手,对新手友好 |
公共服务器压力和数据量都不会太大 | 对服务器造成的压力相对较大,一旦项目增大会影响服务器的使用性能 |
速度快,灵活,非常容易解决冲突,适合大规模开发 | 易于管理,集中式服务器更能保证安全性,适合开发人数不多的项目开发 |
Git 采用离线开发的模式,每个人都可以从远程仓库中下载整个项目进行开发 | SVN 将所有代码都放在服务器端,再往下分发 |
Git 没有严格的权限管理,没有任何的保护机制 | SVN 的权限管理相当严格,按照组、个人某个目录都有权限控制 |
2000 年 CollabNet 创建了 Subversion 项目,一晃 SVN 已经诞生 20 年了,截至 r1873568 SVN 主分支共有 59674 次提交,32 个开发者,288 次发布。2005 年 Linus Torvalds 创建了 Git,截至 de93cc14ab7e8db7645d8dbe4fd2603f76d5851f,git 主分支共有 58209 次提交,1343 个贡献者,742 次发布,诸如 Google,Microsoft,Facebook 这样的巨无霸公司都在使用 Git,Git 主要开发者来自 Google 和 Microsoft。
人多力量大,众人拾柴火焰高,贡献越多码越好,我们可以看到 SVN 只是缓慢变好,而 Git 却在飞速增强,到了今天为什么还不从 SVN 迁移到 Git?
Gitee 的功能
用户在使用 SVN 时,常用的功能有部分检出,目录权限控制等等,并一直以此来否定 Git 的进步。而随着 Git 的不断增强,Gitee 开发者的不断努力,Gitee 逐渐拥有了这些功能。
2019 年 5 月底,Gitee 新增只读目录支持:SVN 的文件和目录只读特性,能否在 Git 也实现? 并且,我写了一篇文章介绍如何实现 Git 目录权限控制。
2020 年 1 月 17 日,码云目前已经初步支持 Git 部分克隆,结合部分克隆和稀疏检出能够提供比 SVN 更好的部分检出体验。
Gitee 除了在 Git 功能上推陈出新,还在团队协作,企业管理上增加了很多功能,自定义权限管理更切合企业实际,任务,里程碑,成员周报能够让开发者异地完成诸多任务,并被考核。 2019 年度疫情爆发以来,各地交通管制,返程复工有诸多不便,使用 Gitee 远程工作正当其时,为什么还不从 SVN 迁移到 Gitee 呢?
将 SVN 存储库迁移到 Gitee
企业只需要在 Gitee 上创建空存储库,然后将 SVN 存储库转换成 Git 存储库推送到 Gitee,便完成了向 Gitee 的迁移。
使用 git svn 工具转换
将 SVN 存储库转换成 Git 存储库非常简单,使用 git 自带的命令便可以完成:
# convert repo to git repo
git svn clone https://example.io/path/svn/repo -T trunk -b branches -t tags
git remote add gitee git@gitee.com:example/name.git
git push -u gitee --all
如果你以后无需追踪原有的 SVN 存储库,可以在 Push 之前运行:
git branch -m trunk master
当存储库越来越大时,git svn
的缺陷便很明显了,转换耗时比较长,这也是 GCC 从 SVN 转成 Git 反反复复花了好几年的原因。
使用 svn2git(ruby) 转换
在 Github 上有个实用工具 svn2git,这个工具主要是简化了转换流程:
sudo gem install svn2git
svn2git http://svn.example.com/path/to/repo
这个工具能够提供更好的提交日志,唯一遗憾的是,自 2016 年以来便不再更新。
使用 svn-all-fast-export/svn2git 转换
KDE 的开发者开发了 svn-all-fast-export/svn2git 这个工具在服务器上将 SVN 存储库转换成 git 存储库,由于省去网络传输和检出,速度要远胜于 git svn/svn2git(ruby)。
KDE 开发者撰写了使用示例:UsingSvn2Git,这一工具使用难度较高,需要创建规则文件,如果存储库较小,不建议使用此类工具。
create repository kdelibs
match /trunk/KDE/kdelibs/
min revision 123453
max revision 456789
repository kdelibs
branch master
end match
end repository
使用 git-svn-fast-import 转换
Gitee 还移植了一个 SVN to Git 的工具 git-svn-fast-import,这个转换又快又简单:
$ mkdir -p repo.git && cd repo.git
$ git init
$ git-svn-fast-import --stdlayout -r 0:100000 /path/to/svnrepo
progress Skipped revision 0
progress Imported revision 1
progress Imported revision 2
progress Imported revision 3
...
progress Imported revision 99999
progress Imported revision 100000
Gitee 开发者曾用此工具为某私有化客户将存储库从 SVN 转到 Git。
在 Gitee 上使用 SVN 功能
随着开发者投入的逐步减少,使用 SVN 接入 Gitee 并不被提倡。
但是,如果你仍然想在迁移到 Gitee 后,使用落后的 SVN,你可以在项目设置页面打开 SVN,然后使用:
svn co svn+ssh://gitee.com/example/repo
这将使用 SVN Over SSH
的方式访问远程存储库,只需要配置好 SSH 公钥,便可免密使用 SVN 协议访问远程 Git 存储库。
更多的 Gitee SVN 可以访问:码云 SVN 支持
总结
开发者为开发者,Gitee 不断改进 Git 的体验,愿更多的企业从 SVN 迁移到 Gitee,享受企业级项目管理和代码协作的一体化云平台。
本文系作者 @Gitee 原创发布在 Gitee 官方博客。未经许可,禁止转载。