合并两个不相关的Git仓库
大致是这样的场景:有两个仓库,一个Git仓库,一个SVN仓库,都是非空的。现在要把SVN仓库中的内容合入Git仓库中,并保留提交记录。听起来有点奇怪,不过现实中的问题总是千奇百怪加变态。既然遇到了,总得想办法解决。花了将近1个小时,简单总结一下。
按照问题的描述,问题可以演变成两部分:
1. 将SVN仓库转换成Git仓库,这一步很简单。百度说:上我吧,我能给你100页的答案;谷歌说:上我吧,我能给你1000页的答案(Sounds weird)。简单来说,就是使用git svn clone
命令,或者使用TortoiseGit或其他工具即可解决,不做赘述,各位看官还是上百度或者谷歌吧;
2. 合并两个Git仓库。
简单起见,笔者以test1、test2为例,讲解演示将test2仓库合并到test1中。
思路
要想将test2合入test1中,那么可以将test2伪造成test1仓库的一个分支,然后合并到test1仓库中(的指定分支,本文为master)
Action
1. clone两个仓库,放入同一个目录中,例如:
workspace
|-test1
|-test2
2. 将test2移入test1目录中,此时目录结构变为如下:
workspace
|-test1
|-test2
3. 将目录切换至test1
cd test1
4. 执行以下命令,将test2作为远程仓库,添加到test1中,并设置别名为test2
git remote add test2 ./test2
5. 执行以下命令,从test2仓库下载数据到本地
git fetch test2
6. 将test2仓库下载过来的master分支作为新分支checkout到本地,并将新分支设为test2
git checkout -b test2 test2/master
7. 切换回test1仓库的master分支
git checkout master
8. 将test2仓库的master分支合入test1仓库的master分支。如不添加allow-unrelated-histories
参数,可能会报fatal: refusing to merge unrelated histories
的异常。
git merge test2 --allow-unrelated-histories
9. push到test1仓库
git push
参考文档
- 《合并两个git仓库》:http://blog.csdn.net/gouboft/article/details/8450696
- 《如何用 Git 合并两个库,并保留提交历史》:http://www.cnblogs.com/AP0904225/p/5811687.html
- SPI 接口协议的Verilog HDL 实现
- 玩转 Nginx 之:使用 Lua 扩展 Nginx 功能
- 键盘防抖
- 按键扫描接口的Verilog HDL 实现
- 病毒分析 | 一只“蜗牛”偷梁换柱,靠锁主页进行牟利
- 移位寄存器的工作原理
- ROM 单元
- 超前进位加法器
- 算法和数据结构—— 查找和排序
- CVE 2017-0199漏洞利用的新姿势
- Java 正则表达式 StackOverflowError 问题及其优化
- 权限后门系列之一:手动打造WordPress权限后门
- 浅谈用户行为分析之用户身份识别:cookie 知多少?
- 串口通信控制器的Verilog HDL实现(四) 接收模块的Verilog HDL 实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 绘制散点图(克利夫兰系列)
- 绘制分组散点图(克里夫兰点图)
- ggplot2绘制玫瑰图
- 绘制极坐标系条形图
- 四步重新认识冗余机器人的控制器设计
- 人脸识别接入常见问题汇总
- TKE上关于postStart 和preStop使用
- 文字识别接入常见问题
- 从 1 到 0 构建博客项目(2) -- 操作系统篇(2)--定制Centos
- 使用Angular依赖注入自定义SAP Spartacus的ProductAdapter
- 获取SAP Spartacus当前显示产品json数据的又一办法
- SAP Spartacus注入自定义的CurrentProductService
- Redis系列(十三)应用之分布式锁
- Oracle数据库 sql条件查询语句与练习
- (六)Hive优化