还在使用 SVN 的企业,如何快速迁移到 Gitee
前言
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?
Git 与 SVN 的比较
Git 是最流行的分布式版本控制系统,而 SVN 是集中式版本控制系统,顾名思义,SVN 的存储库将存储在中央服务器,而 Git 的存储库是存储在本地,当网络连接断开后,SVN 便无法进行提交,使用 Git 的开发者则可以先将代码提交到本地存储库,待网络恢复后再推送到远程服务器。
特征 | Git | Subversion |
---|---|---|
分类 | 分布式版本控制系统 | 集中式版本控制系统 |
许可协议 | GPLv2 | Apache |
基金会 | Software Freedom Conservancy | Apache |
交流会议 | Git Merge | |
技术资讯 | Git Rev News | |
分支 | 轻量级分支(引用) | 复杂的分支模型,创建分支缓慢 |
访问控制 | 通常无细粒度权限控制 | 目录级别的权限控制 |
学习难度 | 及其简单 | 简单 |
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。
简易 Git 命令指南
Git 任务 | 说明 | 命令 |
---|---|---|
配置用户名 | 在创建提交时需要配置用户名 | git config --global user.email 'name@email.io'; git config --global user.name 'Your Name' |
初始化存储库 | git init | |
克隆存储库 | 本地存储库 | git clone /path/to/local/repo |
SSH | git clone git@gitee.com:example/example.git | |
HTTPS | git clone https://gitee.com/example/example.git | |
查看本地状态 | git status | |
查看本地更改 | git diff | |
添加修改 | 比如新增或者增加了文件 A.txt | git add A.txt |
提交更改 | git commit -m "Add a new file 'A.txt'" | |
推送到 Gitee | git push | |
创建分支 | git checkout -b NewBranchName |
更多的命令可以访问 ProGit 或者运行 git help command
查看特定子命令的帮助信息。
在 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,享受更好的体验。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
大前端模块化
打一个通用 UMD 包 有这样一个场景,客户端运行很久,但是法务部和数据部需要收集用户的一些信息,这些信息收集好之后需要进行相应的数据处理,之后上报到服务端。客户端提供一个纯粹的 JS 执行引擎,不需要 WebView 容器。iOS 端有成熟的 JavaScriptCore、Android 可以使用 V8 引擎。这样一个引擎配套有一个 SDK,访问 Native 的基础能力和数据运算能力,可以看成是一个阉割版的 Hybrid SDK 额外增加了一些数据处理能力。 问题结束了吗?处理逻辑的时候还需要用到2个库:cheerio 和 sql。因为都是 Node 工程,所以纯粹的 JS 环境是没办法直接执行。所以需求就进行了转变 ———— 将 Node 项目打包成 UMD 规范。这样就可以在纯粹的 JS 环境下运行。接下来的文章就分析下各种规范。其实也就是前端模块化的几种规范。 前端模块化开发的价值 随着互联网的飞速发展,前端开发越来越复杂。本文将从实际项目中遇到的问题出发,讲述模块化能解决哪些问题,以及以 Sea.js 为例讲解如何进行前端的模块化开发。 恼人的命名冲突 我们从一个简单的习惯...
- 下一篇
Serverless 公司的远程团队沟通策略
本文系译文,Serverless 团队分散在全球各地,本文介绍我们如何管理沟通策略和远程协作。 原作者:FelixDesroches 译者:Aceyclee 首先向不了解我们的人说明一下,Serverless 团队成员总共跨越了 18 个时区,不同成员之间重合的工作时间非常少。 对于所有成员都在一处工作的团队来说,沟通已是难事,而像我们这样的远程团队来说,沟通更是难上加难。没有了面对面的互动,很容易感到孤立:不仅与同事疏离,也与公司愿景脱节。 为了解决这个问题,我们采取的一项举措是每年举行两次团建活动。就在几周前,我们刚刚举行了一次团建活动,我们讨论的主要话题是「沟通」。那么,如何更好地进行沟通呢? 我们进行了深入探讨,不可避免地涉及到一些棘手的话题,但也使我们的方向更加明晰,为继续前进打下了一个更坚实的基础。 以下几点,可能会适用于远程团队。 Radical Candor(坦诚相待)和换位思考 此次团建活动开始前,我们要求团队成员们先阅读 Radical Candor。 Radical Candor 的核心原则之一是真切实际地去了解他人,而非揣测别人是什么样的人。这包括很多方面,例如...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果