SVN项目迁移到Git方法

news2024/11/16 17:57:44

本文记录如何将SVN项目迁移到Git,并保留提交日志信息。

目录

  • Git和SVN差异
  • 环境准备
    • Git安装、配置
  • 项目迁移
    • 1. 将源SVN库转换到Git本地仓库
    • 2. 添加Git远程库地址
    • 3. 推送代码到Git
  • 常见错误
  • 参考文档

Git和SVN差异

Git是一个开源的分布式版本控制系统,由Linux之父Linus Torvalds于2005年开发,而SVN是一个集中式的版本控制系统。

Git和SVN的主要区别如下表:

GitSVN
Git是分布式的SVN是集中式的
Git支持离线操作,有本地的版本控制SVN必须联网操作,只有服务器上的版本控制
上传下载速度快上传下载速度慢
Git功能多,命令较多,有更多的概念和命令。与git相比,SVN操作更简单。
开启分支方便、速度快svn的分支是一个目录,拉分支较慢

以上是它们的主要差异,下面介绍如何将已有的SVN仓库迁移到空的Git仓库,另外,本文Git服务器使用Gerrit搭建。

环境准备

Git安装、配置

Git安装配置方法可参考Git简易教程-安装及简单使用 。

项目迁移

1. 将源SVN库转换到Git本地仓库

使用git-svn将源Subversion库转换为本地Git存储库。

$ git svn clone https://192.168.100.21/svn/zentao

如果SVN项目有忽略文件,执行如下命令转换SVN:ignore属性为 .gitignore文件。

cd c:\mytempdir
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'

如果clone完成后,SVN仓库还有更新,可执行以下命令同步SVN更新:

$ git svn rebase

2. 添加Git远程库地址

$ git remote add origin "ssh://admin@192.168.100.22:29418/zentaopms"

$ git remote show origin
* remote origin
  Fetch URL: ssh://admin@192.168.100.22:29418/zentaopms
  Push  URL: ssh://admin@192.168.100.22:29418/zentaopms
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (up to date)

3. 推送代码到Git

$ git push origin master:master --force
Enumerating objects: 2324, done.
Counting objects: 100% (2324/2324), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2307/2307), done.
Writing objects: 100% (2324/2324), 3.50 MiB | 1.25 MiB/s, done.
Total 2324 (delta 691), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (691/691)
remote: Processing changes: refs: 1, done
To ssh://admin@192.168.100.22:29418/zentaopms
 + eef598e...07c6319 master -> master (forced update)

常见错误

推送代码报如下错误:

$ git push origin master:master --force
Enumerating objects: 2324, done.
Counting objects: 100% (2324/2324), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2307/2307), done.
Writing objects: 100% (2324/2324), 3.50 MiB | 1.32 MiB/s, done.
Total 2324 (delta 692), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (692/692)
remote: Processing changes: refs: 1, done
To ssh://admin@192.168.100.22:29418/zentaopms
 ! [remote rejected] master -> master (failed to lock)
error: failed to push some refs to 'ssh://admin@192.168.100.22:29418/zentaopms'

原因是当前用户没有push权限,到gerrit添加push 权限即可。

参考文档

  1. https://www.atlassian.com/git/tutorials/migrating-overview

  2. https://learn.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git?view=azure-devops

  3. https://www.gitkraken.com/blog/migrating-git-svn

这些熟读经史的人以仁义道德相标榜,以发挥治国平天下的抱负为国家服务,以自我牺牲自许;——黄仁宇《万历十五年》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一、策略模式的使用

1、策略模式定义: 策略模式(Strategy Pattern)定义了一组策略,分别在不同类中封装起来,每种策略都可以根据当前场景相互替换,从而使策略的变化可以独立于操作者。比如我们要去某个地方,会根据距…

云原生应用配置管理的5个最佳实践

引言 在复杂的云原生应用程序中管理配置信息是非常困难的,似乎到处都有配置。在使用基于微服务架构的云原生应用程序中,配置问题成倍增加。 配置无处不在。有针对网络的配置,比如路由规则、端口控制、负载均衡,有针对数据库的配置…

JavaScript Boolean 布尔对象

文章目录JavaScript Boolean 布尔对象Boolean 对象Boolean 对象属性Boolean 对象方法检查布尔对象是 true 还是 false创建 Boolean 对象JavaScript Boolean 布尔对象 Boolean(布尔)对象用于将非布尔值转换为布尔值(true 或者 false&#xff0…

CSS常用选择器

目录 1.CSS是什么 2.CSS的三种写法 2.1内部样式 2.2内联样式 2.3外部样式 3.CSS选择器 3.1标签选择器 3.2类选择器(更好的选择) 3.3ID选择器 3.4后代选择器 3.5子选择器 3.6并集选择器 3.7伪类选择器(复合选择器的特殊用法) 1.CSS是什么 CSS全称Cascding Style Sh…

「兔了个兔」CSS如此之美,看我如何实现可爱兔兔LOADING页面(万字详解附源码)

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

汽车诊断UDS通信协议总结

UDS通信过程 UDS(Unified Diagnostic Services)是一种用于汽车诊断的通信协议,它是基于CAN(Controller Area Network)总线的一种高层协议。 下面是UDS通信的基本流程: 建立诊断会话:通过CAN总…

【VC 7/8】vCenter Server 基于文件的备份和还原Ⅲ—— 使用 SMB 协议备份 VC(VAMI 中文)

目录2.2 使用 SMB 协议备份 VC(VAMI 中文)(1)登录 vCenter Server 管理界面(2)进入备份页面(3)配置 Backup Schedule(4)开始备份(5)备…

ios 通过搜索设备MAC地址绑定

最近做了一个物联网项目,涉及到了设备绑定配网这块,需要了解一下iOS BLE与设备绑定的相关知识点,第一次接触蓝牙相关的项目,所以开始熟悉蓝牙的相关信息。没有去深入研究BabyTooth库,只是感觉CoreBluetooth已经让我更好的理解整个流程这个物联网项目的设备绑定流程是…

sheng的学习笔记-Actuator健康监控

前言在微服务系统里,对微服务程序的运行状况的跟踪和监控是必不可少的;例如GPE,TelegrafinfluxDB都提供了微服务体系监控的方案, ZIPKIN, Skywalking都提供了微服务云体系的APM的方案; 这些解决方案功能全面…

Thumbnailator快速入门

简介 Thumbnailator 是一个开源的 Java 项目,它提供了非常简单的 API 来对图片进行缩放、旋转以及加水印的处理。 有多简单呢?简单到一行代码就可以完成图片处理。形式如下: Thumbnails.of(new File("path/to/directory").listF…

IDEA搭建vue-cli | vue-router | 排错思路、Webpack、Axios、周期、路由、异步、重定向

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Vue.js概述 Vue 是一套用于构建用户界面的渐进式JavaScript框架。 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层…

IDEA集成Git就是这么简单

IDEA集成Git 文章目录IDEA集成Git配置Git环境配置Git的忽略文件①为什么需要配置忽略文件?②配置忽略文件③引用配置文件配置IDEA初始化项目添加到暂存区方式一:方式二:移除暂存区提交到本地库分支创建分支切换分支版本穿梭配置Git环境 配置…

应届大学生学什么技术好?哪些技术适合年轻人?

到了毕业季,应届大学生面临的就是就业问题,很多专业的大学生难以找到对口的工作,或是不得已随便就业,或者是学个技术高薪就业,那么,问题来了,应届大学生学什么技术好?哪些技术适合年…

XC7K160T-1FBG484I、XC7A100T-2CSG324I FPGA可编程门阵列 PDF规格书

1、XC7K160T-1FBG484I说明:Kintex-7 FPGA有-3、-2、-1、-1L和-2L速度等级,其中-3具有最高的性能。-2L器件被筛选为较低的最大静态功率,并且可以在较低的核心电压下运行,以获得比-2器件更低的动态功率。-2L工业(I)温度器件仅在VCCI…

C#教程03-- 数据类型

文章目录 C#数据类型值类型(Value types)引用类型对象(Object)类型动态(Dynamic)类型字符串(String)类型C#数据类型 在 C# 中,变量分为以下几种类型: 值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types) 值类型(Value types) 值类型…

Bean的装配方式(xml和注解)

方式一:基于xml 掌握Bean基于XML的装配,能够使用XML装配方式对Bean进行装配 在基于XML的装配就是读取XML配置文件中的信息完成依赖注入,Spring容器提供了两种基于XML的装配方式,属性setter方法注入和构造方法注入。下面分另对这…

RocketMQ-02

1. 案例介绍 1.1 业务分析 模拟电商网站购物场景中的【下单】和【支付】业务 ###1)下单 用户请求订单系统下单订单系统通过RPC调用订单服务下单订单服务调用优惠券服务,扣减优惠券订单服务调用调用库存服务,校验并扣减库存订单服务调用用户…

Vue2.0开发之——购物车案例-Footer组件封装(50)

一 概述 导入Footer子组件定义fullState计算属性把全选状态传递给Footer子组件实现全选功能 二 导入Footer子组件 2.1 App.vue中导入Footer组件 import Footer from "/components/Footer/Footer.vue";2.2 App.vue中注册Footer子组件 components: {Header,Goods,F…

云原生之使用Docker部署Gitblit服务器

云原生之使用Docker部署Gitblit服务器一、Gitblit介绍二、检查本地docker环境1.检查docker版本2.检查docker状态三、下载Gitblit镜像四、部署Gitblit应用1.创建部署目录2.创建Gitblit容器3.检查Gitblit容器状态4.检查Gitblit容器运行日志五、访问Gitblit首页1.访问Gitblit首页2…

LPDDR4x 的 学习总结(3) - SDRAM基本功能

上一节,我们重点介绍了array的存储结构。 本节介绍array周边的电路,对DDR的基本读写操作的相关功能模块的理解。 即通过哪些模块可以实现对ddr的基本读写。最简化的方式是把存储操作理解为行列选择,拆分为横竖两个纬度,最终实现对arrary进行读写。横向…