如何使用 svn2git 将项目从 Subversion 迁移到 Git 🦅
还记得Subversion(也叫SVN)吗? 🤔 不幸的是,仍有一些团队仍在使用它,但最终希望将它们迁移到更好的选择:Git。 🤖
如果您仍然犹豫是否要花一些时间进行此迁移,请放心,使用名为 svn2git 的简单工具不会花费太多时间。
什么是svn2git?
svn2git 是一个用于将项目从 Subversion 迁移到 Git 的小工具。如果您想保留项目的完整历史记录,使用它很有用。所有提交,以及它们的作者、日期和评论,都将保留在所有分支、trunk(主分支)和标签中。
怎么安装?
根据您的操作系统和您使用的工具,安装svn2git的命令可能会有所不同。就我而言,当我使用Manjaro作为我的 Linux 发行版和yay工具来安装来自AUR(Arch User Repository) 的依赖项时,我只需键入:
yay --sync ruby-svn2git
# or
yay -S ruby-svn2git
进入全屏模式 退出全屏模式
瞧,它现在已经安装好了!
怎么用?
准备
变量
为了简化您要键入的命令,我建议首先将一些您需要的信息放在一起:
-
PROJECT_NAME : 你的项目名称,用于创建一个新的空文件夹,(如
rabbit-cms) -
SVN_PROJECT_URL :旧 SVN 存储库的 URL(如
svn+ssh://svn.benjaminrancourt.ca/projects) -
GIT_PROJECT_URL : 新 Git 存储库的 URL(不需要先创建)(如
git@gitlab.com:ranb2002/rabbit-cms.git)
获得所有信息后,将它们导出到终端,以便可以将它们用作变量:
export PROJECT_NAME=rabbit-cms
export SVN_PROJECT_URL=svn+ssh://svn.benjaminrancourt.ca/projects/rabbit-cms
export GIT_PROJECT_URL=git@gitlab.com:ranb2002/rabbit-cms.git
进入全屏模式 退出全屏模式
作者档案
在使用该工具之前,您还需要准备一个名为authors.txt的文件,该文件将包含有关在您的项目中提交的作者的所有信息(用户名、全名和电子邮件地址)。该文件如下所示:
ranb2002 = Benjamin Rancourt <noreply@BenjaminRancourt.ca>
(no author) = Unknown user <unknown@BenjaminRancourt.ca>
进入全屏模式 退出全屏模式
如果您的项目有很多合作者,则可能需要一段时间来收集必要的信息。幸运的是,有一个命令可以至少列出他们的用户名:
svn log "${SVN_PROJECT_URL}" --quiet | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq
进入全屏模式 退出全屏模式
它应该生成一个用户名列表,例如:
outb3145
ranb2002
进入全屏模式 退出全屏模式
使用产生的列表完成你的作者的文件(authors.txt)根据前面
句法。如果您找不到退休同事的电子邮件地址(例如Joe Bloe),请使用虚构的电子邮件,例如Joe.Bloe@BenjaminRancourt.ca。
导出SVN项目
为确保您不会提交不需要的文件,我建议您将 SVN 项目克隆到一个新文件夹中:
# Go to your Desktop directory, or elsewhere
cd ~/Desktop
# Make sure to copy the authors file here
# Create a new empty directory for your project
mkdir "${PROJECT_NAME}" && cd "${PROJECT_NAME}"
进入全屏模式 退出全屏模式
最后,运行 svn2git 实用程序:
# Print the beginning date
date '+%Y-%m-%d %H:%M:%S'
# Run the svn2git with the authors file defined previously
time svn2git "${SVN_PROJECT_URL}" --authors ../authors.txt
# Print the finishing date
date '+%Y-%m-%d %H:%M:%S'
进入全屏模式 退出全屏模式
因为它可以运行一段时间,所以我添加了date命令和time命令以了解需要多长时间。对于某些项目,可能需要几个小时,但通常需要大约十五分钟。 ⏲️
创建Git项目
如果没有错误,您现在应该拥有项目的本地 Git 存储库。 🎉 但是,除非您只在计算机上工作,否则您可能希望将代码推送到您的 Git 服务器。
# Add the Git repository as origin
git remote add origin "${GIT_PROJECT_URL}"
# Push all branches to the origin
git push --all origin
# Push all tags to the origin
git push --tags origin
进入全屏模式 退出全屏模式
清理
如果您查看在 GitLab 或 GitHub 中创建的标签,您可能会看到一些不正确的标签。 🤨 您可能想要删除它们。
例如,如果您有看起来像VERSION@REVISION(如1.26@19330)的标签,请使用以下命令将其删除:
# Delete the remote tags
git push -d origin $(git tag -l "*@*")
# Delete the local tags
git tag -d $(git tag -l "*@*")
进入全屏模式 退出全屏模式
如果您有其他不需要的标签,只需调整之前使用的正则表达式并运行新命令!
结论
希望这篇文章可以帮助您一劳永逸地摆脱 Subversion。 😉
更多推荐

所有评论(0)