svn迁移到git

SVN迁移到Git

svn目录结构

先来看看svn目录结构,这个会关系到我们如何迁移。以下说的都是单个项目的迁移。

标准
/d/proj1
├── branches
│   ├── a
│   │   └── readme.txt
│   └── b
│       ├── 11.txt
│       └── readme.txt
├── tags
│   └── v1.0
│       ├── 11.txt
│       └── readme.txt
└── trunk
    └── readme.txt
非标准

目前我们使用的结构

/d/proj1
├── branches
│   ├── a
│   │   └── readme.txt
│   └── b
│       ├── 11.txt
│       └── readme.txt
├── develop
└── trunk
    └── readme.txt
git svn

svn迁移到git的核心命令。该命令包含在git中,需要先安装git。

使用示例

git svn clone svn://192.168.1.108:9999/migrator/ --no-metadata --authors-file=userinfo.txt --trunk=trunk --tags=tags --branches=branches migrator

从svn迁移到git的流程就是从svn拉取代码到本地,然后推送到git。当然我们肯定是希望能保留svn中的提交记录,这个完全没有问题。

签名映射

某些情况下,svn中的提交署名和要迁入的git系统署名不一致,这个时候可以指定名字映射,通过参数—authors-file指定。具体的文件格式可以Google下。

如果签名要保持一致,那么可以忽略这个文件

检出代码

先看看对于标准的svn目录结构的工程如何迁移。

对于标准svn目录结构的项目可以使用示例中命令,也可以使用以下简化的命令

git svn clone svn://192.168.1.108:9999/migrator/ -s

来说说示例中各参数的含义

  • 参数–no-metadata表示阻止git导出SVN包含的一些无用信息
  • 参数–authors-file表示SVN账号映射到git账号文件,所有svn作者都要做映射
  • 参数–trunk表示主开发项目,一般就是trunk
  • 参数–branches表示分支项目,--ignore-refs表示不包含后面的分支项目
  • 参数migrator表示git项目名称

再来看看非标准svn目录结构的项目如何处理(以我们现在的目录为例)

git svn clone svn://192.168.1.108:9999/migrator/ --no-metadata --trunk=trunk --tags=tags --branches=branches migrator

先检出不包含develop的代码

接着往下

推送代码到git

使用git命令将各个分支推送到git远端(切换到各个分支并push,不会的自己查询方法)

到此,标准svn目录的工程就迁移到了git上。非标准svn目录的项目继续往下

处理非标准svn目录项目

删除本地检出的代码,重新检出不在svn标准目录中的分支(develop)

git svn clone http://svn.***.com/svn/***/develop/ migrator

将develop推送到远端

git push git@git.***.com:***/migrator.git develop:develop

至此,单个项目迁移完毕。而且新的git项目中保留了所有svn的提交记录。

    原文作者:冰火人生
    原文地址: https://www.jianshu.com/p/75e39b5e48f0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞