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

server/2024/12/2 3:36:20/

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_21">二. 使用 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.ppmy.cn/server/146609.html

相关文章

源代码定制编译:构建理想的库 以curl为例

文章目录 源代码curl开发环境下载地址制定理想的库初级进阶如何知道选项名称交叉编译交叉编译工具链配置编译环境设置目标架构库和头文件路径编译代码 源代码 我们在日常中会接触到比较多第三方库&#xff0c;比如 网络库相关&#xff1a; libevent、mongoose、curl图形界面&…

Oracle 19c RAC单节点停机维护硬件

背景 RAC 环境下一台主机硬件光纤卡不定时重启&#xff0c;造成链路会间断几秒&#xff0c;期间数据库会话响应时间随之变长&#xff0c;该光纤卡在硬件厂商的建议下&#xff0c;决定停机更换备件&#xff0c;为保证生产影响最小&#xff0c;决定停掉该节点&#xff0c;另外节…

CSS定位

定位 其中&#xff0c;绝对定位和固定定位会脱离文档流 设置定位之后&#xff1a;可以使用四个方向值进行调整位置&#xff1a;left、top、right、bottom 相对定位 温馨提示 设置定位之后&#xff0c;相对定位和绝对定位他是相对于具有定位的父级元素进行位置调整&#xff0c…

设置Mysql5.6允许外网访问

设置mysql用户支持外网访问步骤&#xff1a; 需要使用root权限登录mysql&#xff0c;更新mysql.user表&#xff0c;设置指定用户的Host字段为%&#xff0c;默认一般为127.0.0.1或者localhost。 1.登录数据库 1 mysql -u root -p 输入密码 1 mysql> use mysql; 2.查询hos…

python股票数据分析(Pandas)练习

需求&#xff1a; 使用pandas读取一个CSV文件&#xff0c;文件内容包括股票名称、价格和交易量。完成以下任务&#xff1a; 找出价格最高的股票&#xff1b; 计算总交易量&#xff1b; 绘制价格折线图。 代码实现&#xff1a; import pandas as pd import matplotlib.pyplot …

docker从入门到入土

卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ …

mind+自定义库编写注意事项

在mind图形化命令编写中&#xff0c;main.ts 文件是通过图形化编程工具生成 C 代码&#xff0c;然后将生成的 C 代码上传到 Arduino Uno 上执行。 这些由main.ts定义的图形化代码通过生成的代码&#xff0c;需要包含调用arduinoc/libraries文件夹的*.h和*.cpp文件&#…

STM32 使用ARM Compiler V6 编译裸机 LWIP协议栈报错的解决方法

在lwip 的cc.h 中使用以下宏定义&#xff0c;来兼容 V5 和 V6编译器 #if defined (__ARMCC_VERSION) && (__ARMCC_VERSION > 6010050) /* ARM Compiler V6 */ #define __CC_ARM /* when use v6 compiler define this */ #endifV6编译的速度确实比V5块了好多倍。 …