关于使用 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?
用户在使用 SVN 时,常用的功能有部分检出,目录权限控制等等,并一直以此来否定 Git 的进步。而随着 Git 的不断增强,Gitee 开发者的不断努力,Gitee 逐渐拥有了这些功能。Gitee 除了在 Git 功能上推陈出新,还在团队协作,企业管理上增加了很多功能,自定义权限管理更切合企业实际,任务,里程碑,成员周报能够让开发者异地完成诸多任务,并被考核。2019 年度疫情爆发以来,各地交通管制,返程复工有诸多不便,使用 Gitee 远程工作正当其时,为什么还不从 SVN 迁移到 Gitee 呢?
企业只需要在 Gitee 上创建空存储库,然后将 SVN 存储库转换成 Git 存储库推送到 Gitee,便完成了向 Gitee 的迁移。
将 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 反反复复花了好几年的原因。
在 Github 上有个实用工具 svn2git,这个工具主要是简化了转换流程:
sudo gem install svn2git
svn2git http://svn.example.com/path/to/repo
这个工具能够提供更好的提交日志,唯一遗憾的是,自 2016 年以来便不再更新。
使用 svn-all-fast-export/svn2git 转换
KDE 开发者撰写了使用示例:UsingSvn2Git,这一工具使用难度较高,需要创建规则文件,如果存储库较小,不建议使用此类工具。create repository kdelibsmatch /trunk/KDE/kdelibs/ min revision 123453 max revision 456789 repository kdelibs branch masterend matchend repository
使用 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。
随着开发者投入的逐步减少,使用 SVN 接入 Gitee 并不被提倡。但是,如果你仍然想在迁移到 Gitee 后,使用落后的 SVN,你可以在项目设置页面打开 SVN,然后使用:svn co svn+ssh://gitee.com/example/repo
这将使用 SVN Over SSH
的方式访问远程存储库,只需要配置好 SSH 公钥,便可免密使用 SVN 协议访问远程 Git 存储库。
开发者为开发者,Gitee 不断改进 Git 的体验,愿更多的企业从 SVN 迁移到 Gitee,享受企业级项目管理和代码协作的一体化云平台。