svn迁移至git

svn 版本库的迁移,只要svn 库为标准目录(trunk、branches、tags)按照git官方文档基本都可以完成。

这里说说我所迁移的非标准目录结构的svn 库

svn 库里有part1目录,part1目录下又分为:code、UI等等,对于这种非标准目录结构,主干就是part1,没有分支,没有标签。

而code下面又分为android、ios目录,目录内才分trunk、tags、branch,这种目录层级结构……

对于以上非标准目录结构,我采用的是先git svn到本地,并提交到git仓库一个完整的版本,然后再将各目录层级进行拆分为独立标准目录结构svn库,然后再将各个库git svn到本地,再提交到git库。

说的可能有些绕,具体来操作下

全局假设:

原svn库地址:file:///home/svn1/

拆分后的标准库地址:file:///home/svn2/$svn/

原svn库对应的git地址:https://git.example.com/dev/oldsvn.git

拆分后对应的git地址:[email protected]/dev/$svn.git

注:$svn以具体目录或库名命名

目录结构:

part1:

code:

android:trunk、tags、branches

ios:trunk、tags、branches

UI

将原svn库克隆到本地:

对于标准目录结构含有其它自定义的目录,也可采用此方式,只需将trunk设置为自定义的目录名即可

git svn clone file:///home/svn/ --authors-flie=users.txt  --no-metadata --trunk=part1 oldsvn

选项含义:

--authors-file: 指定svn和git用户对应关系

--no-metadata: 告诉 git svn 不要包括 Subversion 通常会导入的元数据

--trunk: 主干名

注:这里没有tags和branches所以不加 --tags --branch选项,也不用-s 选项代替。非标准目录结构,实际存在什么就指定什么,不存在不指定。

在clone过程中,可能会有含‘gc‘ 的提示,遇见则‘git gc --prune=now‘,然后‘git svn fetch‘ 继续clone

成功后,克隆的git 仓库结构对应为:

code:

android:trunk、tags、branches

ios:trunk、tags、branches

UI

将此提交到git 仓库,作为旧版本库,便于查看原svn历史提交修改。

git remote add origin https://git.example.com/dev/oldsvn.git
git push origin --all

对于多层级的目录结构,如现在需要将part1:conde:ios 的库迁移到git 上

首先,将ios 目录拷贝到svn库的根目录,既与part1同级,目录机构如下:

part1:

code:

android:trunk、tags、branches

ios:trunk、tags、branches

UI

android:trunk、tags、branches

ios:trunk、tags、branches

UI:

这样在通过‘git svn clone‘ 的时候,就可以指定trunk为ios了

git svn clone file:///home/svn/ --authors-flie=users.txt  --no-metadata --trunk=ios --branch=branches --tags=tags ios

将标签变为合适的 Git 标签

$ cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
$ rm -Rf .git/refs/remotes/origin/tags

这会使原来在 remotes/origin/tags/ 里的远程分支引用变成真正的(轻量)标签。

接下来,将 refs/remotes 下剩余的引用移动为本地分支:

$ cp -Rf .git/refs/remotes/* .git/refs/heads/$ rm -Rf .git/refs/remotes

将你的新 Git 服务器添加为远程仓库并推送到上面

git remote add origin [email protected]/dev/ios.git
git branch -r
git push origin --all

在变更svn目录的过程中可能会耗费很多时间,因此也可保持原svn目录结构,进行克隆

git svn clone file:///home/svn/part1/code/android --authors-flie=users.txt  --no-metadata -T trunk -t tags -b branches android

使用此方式,可能会出现未知问题,我遇到的是

fatal: refs/remotes/trunk: not a valid SHA1

以上问题尚未解决

时间: 2024-10-31 12:15:53

svn迁移至git的相关文章

坑死人不偿命,svn 迁移到 git

用git的人非常鄙视用svn的.因为要不断的开分支.而且也没有本地的分支这个概念. 但是git 作为一项技术,是一定可以被svn替代的.当然替代的方法是否繁琐另当别论,但一定是能被替代.svn同样也能被git替代.大概所有的技术都是一样.都能相互替代,只是你要为替代本身花费多长时间. git作为一种同步工具好用吗?其实真不好用.我梦想的工具一定是可以帮我自动完成merge过程的,永远不用开分支,永远不用告诉我链表头在哪里,以及怎么reset, 什么时候rebase, 什么时候打tag. 一个工具

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

SVN迁移到Git的过程(+ 一些技巧) 李顺利 Key Words SVN,Git,Clone,Conversion,Tips,VCS,Pro Git 关于在VCS中SVN和Git之间的迁移(Clone)这个部分网上已经有大批的文章介绍,而且都非常不错,能够满足我们的常见的需求,这里介绍的是我自己整理的一些技巧和使用中出现的一些问题和疑问. 阅读本篇文章,请先有一些Git和SVN的使用经验(又是经验,经验到底是什么?我都不知道). 第一部分   今天的实验对象是,把 http://code.g

svn迁移到git

最近需要将项目从svn迁移到git,至于原因请忽略,至于svn与git区别优劣请自行百度.一共有两种方式可行: 第一种方式较为常见,但是会丢失之前svn版本提交记录,就是将svn checkout到本地然后上传到git上 详情参见:http://blog.csdn.net/hanhailong726188/article/details/46738929 第二种方式较为复杂,但是可以保留之前svn版本提交记录,执行命令如下: git svn clone https://172.16.0.241:

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

关于在VCS中SVN和Git之间的迁移(Clone)这个部分网上已经有大批的文章介绍,而且都非常不错,能够满足我们的常见的需求,这里介绍的是我自己整理的一些技巧和使用中出现的一些问题和疑问.阅读本篇文章,请先有一些Git和SVN的使用经验(又是经验,经验到底是什么?我都不知道).  第一部分 今天的实验对象是,把http://code.google.com/p/jdbcdslog-exp/ 这个使用SVN管理的project迁移到Git上面,Git托管网站选择github.SVN迁移到Git,当

将代码库从 SVN 迁移至 Git 并保留所有 commit 记录

公司内部原本使用 SVN 进行版本控制,但随着 Github 的流行我个人的代码管理习惯逐渐转变.虽然公司项目并非开源,SVN 所具有的标准 trunk / branches / tags 结构完全够用,使用 Git 仍然有如下优势: 类似 GitHub 的 GitLab 免费管理工具.将代码托管在自己内部服务器上的同时,提供了优美的 web 界面,图形化分支结构,更直观的代码审查,统计.issue 系统.wiki 等功能全面集成. 更方便主程做 code review,控制代码质量.创建主仓库

MacOS下SVN迁移Git踩坑记

1. First Blood 之前在Windows环境下进行svn到git的迁移是很简单的,参考官方文档. 可是在macOS环境下(macOS High Sierra 10.13.2),输入: $ git svn 神奇的事情发生了,报了以下错误: can't locate SVN/Core.pm in @INC (you may need to install the SVN::Core module) (@INC contains: /usr/local/git/lib/perl5/site_

SVN迁移Gitlab步骤

概述 公司要求将之前使用SVN进行管理的项目迁移到Gitlab进行项目管理,但是运维连不上我们这边的SVN服务器,于是我们就得自己将SVN项目迁移到Gitlab.Yeah!终于有我表现的机会了. 要求保留SVN上的提交记录 总体的执行步骤如下: 账号对应 git-svn拉取原来SVN项目 提交项目到Gitlab上 执行步骤 接下来我们就要进行转换了. 账号对应 SVN使用的是用户账号展示的提交记录,但是git使用的是账号和邮箱进行人员确认的,因此我们需要使用将二者进行对应. 新建个txt文本文档

SVN 迁移

前段时间公司的SVN服务器做升级,需要做SVN迁移,百度谷歌了解了大概,(感谢老板放心啊,还好没什么问题,都迁移成功了),之前用的是1.6,我看了下官网有1.8,征得同意后就直接升级加迁移一起做了了.下面是迁移的大概步骤 1. 源服务器: 1) 停掉SVN service 2) 运行dump 命令,制作待迁版本库的dump 文件 由于当前版本库中文件版本较多,一万两千多个,试过一次性制作dump文件,但是会出错, 所以改成分段制作 (这里用了一个脚本) echo %date% %time% St

Svn Replacement For Git Stash

svn 实现git stash类似的功能 % svn diff > WorkInProgress.txt % svn revert -R . <make changes> % svn commit -m "Patched to support server schema change" % patch -p0 -i WorkInProgress.txt % rm WorkInProgress.txt Svn Replacement For Git Stash,布布扣,