为什么80%的码农都做不了架构师?>>>   

#0 系列目录#

  • 版本管理
  • SVN版本管理:场景命令实战
  • SVN版本管理:两种开发模式
  • GIT版本管理:场景命令实战
  • GIT版本管理:Git Flow模型
  • 项目如何从 SVN 迁移到 Git

很多有点历史的项目,都是用的 Subversion 作为版本控制工具的,随着项目需要,很多团队就打算采用 Git 作为替代工具了。好,现在问题来了:项目如何平滑的从 Subversion 迁移到 Git

这里所谓的迁移是按照版本控制要求来迁移,包括:

尽可能完整的由谁提交的代码、做出的代码变更记录,提交日志等。

尽可能完整的分支、标签等。

因为毕竟是不同的版本控制工具,转化过程难免会有瑕疵。

#1 准备环境# 安装用到的工具的软件包,这里以 Ubuntu 为例:

$ sudo apt-get install subversion git
$ sudo apt-get install git-core libsvn-perl perl libterm-readkey-perl

#2 规范 Subversion# 确认项目的 Subversion 地址:

# 后面统一用 $PROJECT 表示项目的 Subversion 地址
# 这里的示例项目名称是 west
https://scms.example.com/svn/projects/west/

规范项目在 Subversion 的目录结构:

标准的 trunk、branches、tags 目录布局。

branches 和 tags 目录下的分支和标签保持平级,例如:

tags/v1.0.0 可以。

tags/1.x/v1.0.0 多了层目录就不可以。

如果不是平级,以 tags 为例,先执行 svn mv 操作。

方式 1 - 远程 svn mv

$ svn mv $PROJECT/tags/1.x/v1.0.0 $PROJECT/tags/v1.0.0

方式 2 - 本地 svn mv

$ svn co $PROJECT west_subversion
$ cd west_subversion
$ svn mv tags/1.x/v1.0.0 tags/v1.0.0

最后规范后的目录示例如下:

west
├── trunk
│   ├── docs
│   ├── west
│   ├── setup.py
│   └── README.rst
├── branches
│   ├── hotfix_add_user_error
│   ├── hotfix_issuse_9527
│   ├── feature_unittest4app
│   └── feature_multi_add_user
└── tags├── v1.0.0├── v1.0.1├── v2.0.0└── v2.1.0

#3 生成提交者 ID 和邮箱#

  • example.com代表组织的邮箱,比如:knownsec.com
  • 但如果个人邮箱不是统一的组织的话,就需要手工编辑 users.txt 了

svn log $PROJECT --xml | grep -P "^<author" | \sort -u | perl -pe 's/<author>(.*?)</author>/$1 = $1 <$1@example.com>/' > users.txt

#4 迁出项目代码(git svn)#

git svn clone $PROJECT --authors-file=users.txt --no-metadata --localtime --stdlayout

--authors-file 是得到的 git log 提交记录映射好提交者的信息;

--no-metadata 是得到的 git log 不带上对应的 Subversion 信息了,更干净;

--localtime 是得到的 git log 以本地时间为准,建议用上;

--stdlayout 是先前准备的按规范目录风格来迁出代码;

#5 转化成Git的仓库格式(tags 和 branches)# 处理 tag:

git for-each-ref refs/remotes/tags | cut -d / -f 4- | grep -v @ | while read tagname; do git tag "$tagname" "tags/$tagname"; git branch -r -d "tags/$tagname"; done

处理 branch:

git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/$branchname"; git branch -r -d "$branchname"; done

#6 一些清理工作# 由于这个转化会将及历史上的 branches 和 tags 也都生成一个 Git 的分支和标签,所以还是得清理下你认为不用的分支和标,可能包括:

Subversion 历史上错误的 tags。

Subversion 历史上临时的 branches。

冗余的 trunk 分支(其实跟转化后的 Git master 分支一样)。

#7 添加到远程 Git 仓库#

  • 比如:GitHub 上创建项目 west
  • 添加本地 Git 项目到刚创建的远程 Git 仓库
git remote add origin git@github.com:akun/west.git
git push origin --all
git push origin --tags

#8 完成迁移# 这样,可以直接在 Git 下来继续你的项目了。

git clone git@github.com:akun/west.git

#9 遗留问题# 上述方式转化其实还有瑕疵,比如:

Subversion 允许空目录,转化 Git 用 git svn,处理空目录带上 --preserve-empty-dirs 可能会报错,不处理,可能项目的程序原先依赖空目录的处理就得修改。

类似 svn:externals,svn:ignore,svn:merge 等属性丢失

不过问题不大,可以接受,Subversion 迁移 Git 算是基本平滑迁移。

转载于:https://my.oschina.net/xianggao/blog/667048

项目如何从 SVN 迁移到 Git相关推荐

  1. SVN迁移到Git的过程(+ 一些技巧)

    SVN迁移到Git的过程(+ 一些技巧) 李顺利 Key Words SVN,Git,Clone,Conversion,Tips,VCS,Pro Git 关于在VCS中SVN和Git之间的迁移(Clo ...

  2. SVN迁移至GIT,并附带历史提交记录

    文章目录 SVN代码同步至GIT 背景 准备工作 操作步骤 SVN代码同步至GIT 背景 近年随着信息工程的多元化发展,GIT逐渐取代SVN成为主流的版本管理工具,部门的项目代码也决定迁移至git进行 ...

  3. 从SVN迁移到Git(包括SVN历史纪录)【最系统的讲解】

    从SVN迁移到git有很多方法,最简单的就是使用git包自带的git svn命令(git v1.7及以上).除此之外还有一些第三方的专门的转换工具如http://www.subgit.com/,htt ...

  4. Git学习文档之二 应用总结-svn迁移到git

    ##svn迁移到git 在 Subversion,每个提交者在都在主机上有一个用户名,记录在提交信息中.如果想让这条信息更好的映射到 Git 作者数据里,则需要 从 Subversion 用户名到 G ...

  5. Gitea:从SVN迁移到Git

    目录 环境信息 迁移步骤 SVN和Git都是优秀的版本管理工具.不幸的是,对于从SVN迁移到Git的过程.命令和说明,网上不少文章存在误导性.因此本文以Gitea为例,演示从SVN迁移到Git的详细过 ...

  6. 将项目从 SVN 迁移到 GIT

    场景 项目开发中,项目原本是用的SVN,已经用了一年了,现在公司要抛弃SVN用Git,要求把SVN的代码直接搬过去Git,并保留之前的历史提交记录. 操作步骤 找到已经被svn管理的项目的根目录 Wi ...

  7. 使用subgit进行svn迁移至git(branch,tags)

    前言: 最近公司需要将整体项目从svn迁移至gitlab上,经过几天的研究,现记录一下流程 整体思路是进行一次导入: 先通过subgit将svn整个import至本地,在与git上的项目进行合并. 1 ...

  8. svn迁移到git报Checksum mismatch: TapiParser/jar/tapiParser/tapiParser.jar c7a0bbbcc00e06bf963e4499faf829

    由于对git和svn都不是很熟悉,被分到这个任务是很懵的,好在有操作手册跟着操作,没有难度,但是在迁移过程中就报了错: Checksum mismatch: TapiParser/jar/tapiPa ...

  9. svn迁移到git实际操作(亲测有效)

    要把svn项目迁移到git,话不多,直接上 首先svn与git安装好 1.到svn项目目录右键选中gitbash打开窗口,执行获取用户并映射成git样式账号命令如下: svn log -q | awk ...

最新文章

  1. silverlight带有复选框的列
  2. 安全篇之手机数字密码九宫格究竟哪个更安全?
  3. Yahoo 拒绝 Microsoft 的收购请求
  4. 别再搞纯文本了!多模文档理解更被时代需要!
  5. [Ajax] 案例 -- 三级联动
  6. php wmi,wmi与vbs
  7. Hibernate存取JSON数据
  8. Snagit--高难度、多功能截图,有了它截图不求人!
  9. WebBrowser无法显示招商银行密码输入控件的问题
  10. 数据结构导论【五】之 图
  11. 大数据,云计算,人工智能之间的关系
  12. 阿里云数据库与自建数据库的性能对比
  13. FZU1892接水管游戏-BFS加上简单的状态压缩和位运算处理
  14. 【技术贴】禁止打印进程spoolsv - spoolsv.exe随机启动
  15. java默认字体_设置 Java 系统的默认字体
  16. 计算机主板会自动切断电源是怎么回事,主机启动一秒又自动断电一直循环 就只擦内存条...
  17. Partially written block detected 疑问及解决办法
  18. Solana 基金会与韩国区块链孵化器 ROK Capital 合作推出 2000 万美元生态基金
  19. Mapbox学习笔记(1)——style
  20. 辰华宏命令(Macro Command)使用说明

热门文章

  1. Realtime Ray Tracing RenderMan Point Cloud
  2. Query-digest-UI监控慢查询,以及此工具的改进版
  3. 《Node.js 入门系列》—— 一些简单的排错方法(一)
  4. Python变量的复制
  5. SGU 160.Magic Multiplying Machine
  6. 《黑书》hdu1271递推习题:整数对
  7. 关于梦想--------听说标题够长才有人看
  8. 【转载】 quartus中调用modelsim仿真的方法
  9. 环境在c盘_如何给女朋友解释为什么 Windows 上面的软件都把自己安装在 C 盘
  10. python的常量和变量_python变量和常量