文章目录 [显示]
sudo apt-get install subversion
sudo apt-get install git
sudo apt-get install git-svn
Shell
首先用svn将代码checkout到本地
svn checkout http://svn.company.com/projectname
Shell
在subversion,每个提交者都在主机上有一个用户名,记录在提交信息中,比如blame的输出以及git svn log。如果想要让这条信息过呢更好的映射到git里面,需要在svn用户名到git用户名之间建一个映射关系,我们这里用user.txt文件来建立这个映射关系:
veaxen = veaxen <veaxen@veaxen.com>
jack = jack <jack@veaxen.com>
tom = tom <tom@veaxen.com>
在svn库下执行下面的命令生成user.txt,获取svn作者的列表:
svn log --xml | grep -P "^<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > user.txt
Shell
根据svn账号与git账号的映射,补充user.txt为上述格式。
利用git clone ...
命令,可以将svn工程导出为git工程,但是如果只是简单的执行下面命令的话:
git svn clone http://svn.company.com/projectname/trunk
Shell
那么我们只是将其中的主分(trunk分支)支及其log拉去到本地,其他分支并没有,需要用到--trunk
、--tags
、--branches
等选项。
需要注意的有下面几点:
1. 除了trunk
单词是单数之外,其他选项单词都是复数。--trunk
参数指明了svn主分支所在目录,如果不指明默认是trunk目录,--tags
指明了svn的tag所在目录(我们公司没有用到tag管理代码,这里我忽略),--branches
参数指明了其他分支所在目录,如果不指明默认是branches目录。
2. 这几个选项指定的都是相对路径,相对于git svn clone
后面紧跟着的路径位置,所以不要在选项里制定诸如“http://”开头的相对路径。
3. 除了trunk之外,其他几个选项都可以重复指定,如果你的分支/标签分别在svn目录上的不同文件夹下,可以多次指定。
于是,对应我的实际情况,git-svn命令是这样的:
git svn clone http://svn.company.com/projectname/ \ #注意这里写到项目根目录,而不是写到分支所在路径
--trunk="trunk" --branches="branch" \ #这里的trunk可以不指定,而branches则是一定要指定的,这是由于我们的svn项目的目录不是标准的svn目录,我们的其他分支是在branch目录下,而不是svn建议的branches目录
--no-metadata --authors-file=user.txt \ #前一个参数用来阻止git svn包含哪些svn附带的信息,后一个参数是根据文件里指定的映射关系,将svn用户同git用户联系起来
projectname
Shell
稍等一会,就可以看到真个svn的主分支和其他分支都被导出来了,并且保留了commit信息,一棵赛艇!:smile:
执行git branch -a
可以看到相应的分支已经按照我们指定的选项建立起来了,我的实际情况是:
git branch -a
* master
remotes/origin/develop
remotes/origin/func_01_branch
remotes/origin/func_02_branch
remotes/origin/func_03_branch
remotes/origin/func_04_branch
remotes/origin/func_05_branch
remotes/origin/trunk
Shell
你会发现,remotes/origin/xxx这样的分支,git会认为他们是虚拟的远程分支,我们可以通过下面命令将分支拉到本地(以develop为例):
git checkout -b develop remotes/origin/develop
Shell
还有一点要说明的是,remotes/origin/trunk分支其实与本地master分支是一样的,所以我们没有必要将这个分支转换为本地分支。
首先要在git服务器上创建一个空的工程,比如“git@rdgit.company.com/some_group/projectname.git”
然后再本地仓库执行:
git remote add origin git@rdgit.company.com/some_group/projectname.git
Shell
将主分支上传到git服务器:
git push origin master:master
Shell
其他分支也是利用这个语句创建新分支上传。
完成之后,在git服务器上就可以看到完整的change log以及分支的变化情况了。
其实迁移的时候还需要注意一个问题,那就是 svn 支持空目录的版本控制,但是 git 不支持。
导出 svn 之后,最好对比一下原始的 svn 工程内是否有空目录。如果有,那么你需要手工(或者写脚本)在导出的 git 工程中创建这些目录,并且在目录中建立一个 “.gitkeep” 文件(这是约定俗成的做法),并且将这些文件git add .gitkeep
,以加入 git 的版本控制。这样就以迂回的方式通过 git 版本控制了目录。
Original url: Access
Created at: 2019-10-15 17:41:57
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论