SVN迁移至Git
如何将 SVN 仓库迁移到 Git 并保留提交记录
因为自己开发项目的需求,所以需要把SVN迁移到Git进行管理,但是现在的情况是,我有SVN项目,也有Git项目。我要达到的效果是,把SVN的某个分支迁移到Git项目上的一个新分支上。
在这篇博客中,我们将介绍如何将一个 SVN 仓库迁移到 Git 仓库,同时保留 SVN 仓库的所有提交记录。
一、生成userinfo.txt
此命令从 SVN 仓库的日志中提取所有提交记录的作者,并将每个作者格式化为 Git 的用户格式(用户名 = 用户名 <用户名@aspirecn.com>),然后将唯一的用户信息保存到 userinfo.txt 文件中。
- 到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
总结
- 使用
git svn clone --branch
命令克隆 SVN 仓库中的spring-update-release
分支到本地 Git 仓库。 - 创建并切换到名为
spring-update-release
的本地 Git 分支。 - 将新创建的分支推送到远程 Git 仓库。
注意事项:
userinfo.txt
文件:如果 SVN 仓库中的用户名和 Git 仓库中的用户名不同,确保你提供了正确的用户映射文件。git svn clone
的执行时间:如果 SVN 仓库的历史比较大,git svn clone
的过程可能需要一定的时间,具体时间取决于 SVN 仓库的大小。
执行这些步骤后,你应该能够将 SVN 仓库中的 spring-update-release
分支迁移到 Git 仓库中的同名分支,并成功推送到远程仓库。
希望这篇博客能帮助你成功将 SVN 仓库迁移到 Git!如果有任何问题,欢迎在评论区留言讨论。