​因为历史原因,刚进小组时,组内主要利用 SVN 作为兴趣部落的代码托管工具,最近组里重新定义了一套代码 Review 规范,而 SVN 不能满足我们的需求,再加上公司的 Git 平台已经成熟可用,我们便萌生了将兴趣部落的代码从 SVN 迁移到 Git 上的念头。经过几天的努力,现在代码已迁移完成,下面就把过程与总结写下来供大家参考。

方法1

​先介绍一个简单粗暴的方法,TortoiseSVN 有自带的 Export 功能,可以将 SVN 的代码全部导出到一个新的文件夹下。下面简单描述下步骤,以 Github 为例。

​先在 Github 上建一个 repository,并将之 clone 到本地,假设文件夹叫 A。然后找到你要迁移的 SVN 项目,右击选择 TortoiseSVN -> Export,选择 A 文件夹,确定后 SVN 项目中的代码便到了 A 文件夹中,下面就可以将这个项目当做一般的 Git 项目来对待了。

​说这个方法简单粗暴,是因为这个方法其实跟将整个 SVN 项目的代码直接复制粘贴到 Git 项目文件夹下没多大差别,并且这次到 Github 上的提交会被当成整个项目的第一次提交,也就是以前的提交记录没有被迁移过来。

方法2

​如果你想做的完美一点,不仅迁移代码,还要迁移以前的提交记录,那应该怎么做呢?那就要用到 git-svn 了,详细文档请参考:git-svn。

​使用 git svn clone your-svn-url your-target-folder 可以将 SVN 的主干代码以及提交记录拉取到了本地目标文件夹 your-target-folder 中。这种方式只能迁移一个特定文件夹的代码(一般迁移 trunk)。但如果你不仅想迁移主干代码,还想将 branch 和 tag 的代码一并迁移,你可以使用: git svn clone root-path --trunk="trunk/project" --branches=“branches” --tags="tags"。需要注意的是,trunk、branches 以及 tags 的路径是相对的。如果你的项目很庞大并且有很长的历史,那么迁移过程将会非常漫长(以天为单位)。如果你迁移过程中很幸运没遇见程序出错、电脑崩溃而最终成功的话,你可以执行 git branch -a 看看分支情况。因为我们没有迁移 branch 和 tag,所以不了解有什么坑。

​新的文件夹是没有 .gitignore 文件的,所以需要新建一个。

​当准备工作都做好后,下面可以将代码提交到远程仓库中:

git remote add origin your-git-repository
git push -u origin master

用户对应

​如果 SVN 的账号和 Git 的账号名称不一样,并且 SVN 中的账户就是一个 ID,而 Git 中的账号是 username 和 email,SVN 的 ID 可以和 Git 的 username 和 email 在迁移过程中对应起来,具体做法如下:

// 在 SVN 项目根目录:
svn log --xml | grep author | sort -u | perl -pe 's/.>(.?)<./$1 = /'

输出一列 SVN 用户列表,将之保存到 users.txt 中,并且修改账号对应关系,格式如下:

zhangsan = 张三 <zhangsan@tencent.com>
...
wangwu = 王五 <wangwu@tencent.com>

上面的 zhangsan 就是 SVN 的 ID,后面对应的就是 username 和 email。有了 users.txt 的账号对应信息,下面可以迁移了:

git svn clone your-svn-url --authors-file=users.txt your-target-folder

也就是在迁移命令中加入 --authors-file 参数。

​整体来看,迁移过程很顺利,没有很复杂的步骤。如果你在迁移中有什么困惑,可以去官网上瞧瞧。

兴趣部落的 Git 迁移实践相关推荐

  1. 兴趣部落的前端性能优化实践概览

    本文对兴趣部落项目前端开发中使用到的性能优化方式进行总结.兴趣部落项目是手机QQ(以下简称手Q)中最大的纯网页应用,每日有大量的用户访问,对于腾讯这样一个对产品有着极致要求的公司,性能优化是一个绕不开 ...

  2. VPGAME 的 Kubernetes 迁移实践

    作者 | 伍冲斌 VPGAME 运维开发工程师 导读:VPGAME 是集赛事运营.媒体资讯.大数据分析.玩家社群.游戏周边等为一体的综合电竞服务平台.总部位于中国杭州,在上海和美国西雅图分别设立了电竞 ...

  3. 面向亿万级用户的QQ一般做什么?——兴趣部落的 Web 同构直出分享

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:李强,腾讯web开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq. ...

  4. git最佳实践_Git最佳实践如何为我节省大量的返工时间

    git最佳实践 by Hemal Patel 通过赫马尔·帕特尔 Git最佳实践如何为我节省大量的返工时间 (How Git best practices saved me hours of rewo ...

  5. 兴趣部落老是显示无法连接服务器失败,qq兴趣部落为什么停运

    很多人都有玩过qq兴趣部落,但是最近官方宣布兴趣部落即将下线,很多用户都不是很了解qq兴趣部落为什么停运.针对这一点,非凡小编给大家整理了相关的内容分享,赶紧来了解一下吧! qq兴趣部落为什么停运 一 ...

  6. Git 最佳实践:分支管理

    5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...

  7. mysql 迁移 nosql_从关系型Mysql到Nosql HBase的迁移实践

    2013年11月22-23日,作为国内唯一专注于hadoop技术与应用分享的大规模行业盛会,2013 Hadoop中国技术峰会(China Hadoop Summit 2013)于北京福朋喜来登集团酒 ...

  8. k8s删除deployment_VPGAME k8s迁移实践(5) Deployment 与 Service 配置

    作者:Charl 在 CI/CD 流程中完成 docker 镜像的打包任务之后需要将服务所对应的镜像部署到 k8s集群中.k8s 提供了多种可以编排调度的资源对象.首先,我们简单了解一下 k8s 中的 ...

  9. [专栏精选]Unity中的Git最佳实践

    本文节选自洪流学堂公众号技术专栏<大话Unity2018>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 小新:"我昨天尝试了一下使用Git来管理Unity项目 ...

最新文章

  1. CornerNet-Lite:CornerNet粗暴优化,加速6倍还提点了 | BMVC 2020
  2. 集成学习需要理解的一些内容
  3. 如何根据CSD寄存器计算SD卡容量(csd v1.0 csd v2.0)
  4. 网页代码抓取工具_MAC网页颜色代码提取工具
  5. boost::statechart::in_state_reaction相关的测试程序
  6. jQuery-1.9.1源码分析系列(六) 延时对象应用——jQuery.ready
  7. SQL Server - 高可用与灾难恢复(HADR)技术 -- AlwaysOn可用性组(理论篇)
  8. java服务端用到的javase的基础知识_JavaSE——网络编程基础知识
  9. Sketch for mac v78 矢量绘图软件
  10. 桌面计算机 回收站图标,桌面回收站图标不见了?回收站图标没了?3种方法快速解决...
  11. 中兴新支点操作系统_中兴新支点国产操作系统体验报告:使用流畅,性能稳定!...
  12. BGP 路由聚合实验
  13. 研究生看论文的看的是什么
  14. 前端剑法第二式————淬焰
  15. 禅与摩托车维修艺术摘录
  16. 一篇文章带你快速上手Airtest和Poco
  17. 电子技术——伪NMOS逻辑电路
  18. Android总结(1-3章)
  19. 6大多人协作工具推荐
  20. 计算机应用基础 小组讨论,【《计算机应用基础》教学探讨】 计算机应用基础 2018...

热门文章

  1. PonyAI的首份美国无人出租成绩单:总数1271趟,15%拼车
  2. SAP MM 采购订单与相关合同的价格差异问题分析
  3. 最萌算法学习来啦,看不懂才怪!
  4. 揭秘人工智能(系列):深度学习是否过分夸大?
  5. 2019需要关注的几大AI趋势
  6. 人工智能(5)---一文解读人工智能创业的5大坑
  7. SAP MM 为FO类型的采购订单做MIRO时候PO Amount不自动带出来问题之对策
  8. SAP MM 如何查询物料凭证号是由哪个IDoc Post后产生的?
  9. 福利丨吴恩达机器学习新书免费领!
  10. 自然语言处理的发展历程