Bootstrap

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

如何将 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 = 张三 [email protected]

这里涉及到一个如何导出这个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 <[email protected]>
    
  • 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!如果有任何问题,欢迎在评论区留言讨论。

参考

;