当前位置: 首页 > article >正文

SVN迁移至Git,保留commit提交记录

SVN迁移至Git

  • 如何将 SVN 仓库迁移到 Git 并保留提交记录
    • 一、生成userinfo.txt
    • 二. 使用 `git svn clone` 命令迁移 SVN 到 Git
      • 2.1. 基本命令格式
      • 2.2. 示例:从 SVN 克隆到 Git
      • 参数说明:
      • 2.3 执行的过程遇到的窗口
      • 2.4. 迁移过程
    • 三. 将 Git 仓库推送到远程 Git 仓库
      • 步骤 1:进入本地 Git 仓库目录
      • 步骤 2:创建并切换到 `spring-update-release` 分支
      • 步骤 3:将 Git 仓库推送到远程 Git 仓库
    • 总结
      • 注意事项:

如何将 SVN 仓库迁移到 Git 并保留提交记录

因为自己开发项目的需求,所以需要把SVN迁移到Git进行管理,但是现在的情况是,我有SVN项目,也有Git项目。我要达到的效果是,把SVN的某个分支迁移到Git项目上的一个新分支上

在这篇博客中,我们将介绍如何将一个 SVN 仓库迁移到 Git 仓库,同时保留 SVN 仓库的所有提交记录。

一、生成userinfo.txt

此命令从 SVN 仓库的日志中提取所有提交记录的作者,并将每个作者格式化为 Git 的用户格式(用户名 = 用户名 <用户名@aspirecn.com>),然后将唯一的用户信息保存到 userinfo.txt 文件中。

  1. 到svn项目目录右键选中gitbash打开窗口,执行获取用户并映射成git样式账号命令如下:
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2"@qq.com>"}' | sort -u > userinfo.txt

然后会在目录生成文件userinfo.txt样式如:zhansan = 张三 zhansan@qq.com

这里涉及到一个如何导出这个txt文件夹的问题:
首先你要进入到你的git目录,记住,不是仓库里,是你提交的那个地方的git,

二. 使用 git svn clone 命令迁移 SVN 到 Git

2.1. 基本命令格式

git svn clone 是将 SVN 仓库迁移到 Git 仓库的主要命令。以下是基本命令格式:

git svn clone [SVN仓库URL] [目标Git路径] --no-metadata --authors-file=[用户信息文件]

2.2. 示例:从 SVN 克隆到 Git

假设你有一个 SVN 仓库的 URL 为 https://**.1.6.**:8**3/svn/MIGUMS_PROJECT/quality_platform,并且你想要将其中的 spring-update-release 分支迁移到 Git 仓库,命令如下:

git svn clone -r 138000:HEAD [SVN仓库URL] --no-metadata --no-minimize-url --authors-file=userinfo.txt 

我这个是在当前文件下执行的,所以理论上后面还应该有一个地址,也就是,然后在git bash下好像这么是错的,反正我试了好多次,不行,所以我干脆就不写了,直接在当前文件下执行命令。

git svn clone -r 138000:HEAD [SVN仓库URL] --no-metadata --no-minimize-url --authors-file=userinfo.txt     mini_project\quality_platform_git

参数说明:

  • -r 138000:HEAD:表示从 SVN 仓库的 r138000 版本到最新版本(HEAD)进行迁移。如果你想迁移整个历史记录,可以去掉 -r 参数。

  • --no-metadata:避免在 Git 中包含 SVN 的元数据(例如 git-svn-id)。

  • --no-minimize-url:保留 SVN 仓库的完整 URL 地址。

  • --authors-file=userinfo.txt:提供一个文件,用来映射 SVN 用户名到 Git 用户名,避免在 Git 中显示不一致的提交作者。文件格式如下:

    svn_user_name = Git Full Name <git_email@example.com>
    
  • mini_project\quality_platform_git:指定克隆后的 Git 仓库的本地路径。

2.3 执行的过程遇到的窗口

若是第一次拉取svn中一般会出现这个窗口提示,这个提示就填:p,

在这里插入图片描述
填完p后,后面还会弹出窗口做相关验证,分别是操作系统的密码(若你电脑或者服务器设置了密码),svn的账号,svn的密码
在这里插入图片描述

都填完了,就会开始拉去svn代码了
在这里插入图片描述

等一段时间,拉取完成后,进入拉取代码完成后的项目文件夹中会看代码与生成的.git文件夹
在这里插入图片描述

2.4. 迁移过程

  • git svn clone 命令会从 SVN 仓库拉取数据,转换为 Git 格式,并保留 SVN 提交记录。
  • 克隆完成后,Git 会在本地创建一个新的 Git 仓库,并将所有 SVN 提交历史导入到 Git 中。
  • 你可以通过 git log 查看所有的历史提交记录。

三. 将 Git 仓库推送到远程 Git 仓库

四个命令!

在这里插入图片描述

步骤 1:进入本地 Git 仓库目录

克隆完成后,进入本地仓库目录:

cd D:\mini_project\quality_platform_git

步骤 2:创建并切换到 spring-update-release 分支

现在,你需要创建一个新的 Git 分支,命名为 spring-update-release,并将 SVN 分支的内容导入到这个分支中。你可以直接检查到 spring-update-release 分支:

git checkout -b spring-update-release

步骤 3:将 Git 仓库推送到远程 Git 仓库

完成本地分支的创建后,将其推送到你的远程 Git 仓库。首先,确保你已经设置了远程仓库,如果没有设置,可以用以下命令设置:

git remote add origin https://gitsz1.aspirecn.com/CDNBPM/qualityplatform.git

然后,推送到远程 Git 仓库:

git push origin spring-update-release

总结

  1. 使用 git svn clone --branch 命令克隆 SVN 仓库中的 spring-update-release 分支到本地 Git 仓库。
  2. 创建并切换到名为 spring-update-release 的本地 Git 分支。
  3. 将新创建的分支推送到远程 Git 仓库。

注意事项:

  • userinfo.txt 文件:如果 SVN 仓库中的用户名和 Git 仓库中的用户名不同,确保你提供了正确的用户映射文件。
  • git svn clone 的执行时间:如果 SVN 仓库的历史比较大,git svn clone 的过程可能需要一定的时间,具体时间取决于 SVN 仓库的大小。

执行这些步骤后,你应该能够将 SVN 仓库中的 spring-update-release 分支迁移到 Git 仓库中的同名分支,并成功推送到远程仓库。


希望这篇博客能帮助你成功将 SVN 仓库迁移到 Git!如果有任何问题,欢迎在评论区留言讨论。

参考


http://www.kler.cn/a/417966.html

相关文章:

  • 搭建AD域服务器
  • 周鸿祎再次“创业”,盯上百度
  • Rust vs Java:后端开发应该选哪个?
  • SQL面试题——抖音SQL面试题 最近一笔有效订单
  • ZYNQ详解
  • 使用Dify与BGE-M3搭建RAG(检索增强生成)应用-改进一,使用工作流代替Agnet
  • 使用Spring Data MongoDB中的MongoTemplate实现分组查询最新的数据
  • 设计模式---建造者模式
  • 迅为RK3588开发板Android12源码定制开发-安装adb驱动
  • 飙升Vue.js组件开发
  • Flutter 1.1:下载Flutter环境
  • 一个鸿蒙开发者的探索:实现相册访问功能
  • Python+Pytest+Yaml+Allure数据参数化(DDT)数据驱动(一)
  • 前端css实例
  • 【04】Selenium+Python 手动添加Cookie免登录(实例)
  • 何时在 SQL 中使用 CHAR、VARCHAR 和 VARCHAR(MAX)
  • Golang context 的作用和实现原理
  • 7. 现代卷积神经网络
  • 【051】基于51单片机温度计【Proteus仿真+Keil程序+报告+原理图】
  • uni-app获取到的数据如何保留两位小数
  • JavaWeb开发 : tomcat+Servlet+JSP
  • Mac苹果电脑 java前后端开发环境及软件安装教程
  • 算法编程题-煎饼排序 不含AAA或者BBB的字符串
  • Jtti:排查和解决服务器死机问题的步骤
  • LangChain——HTML文本分割 多种文本分割
  • Ubuntu20.04运行LARVIO