还记得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。 😉

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐