SVN到GIT迁移的完整教程
我已经在SVN上工作了很长时间,最近我开始研究Git。
在熟悉Git之后,我可以清楚地说它比SVN好得多。
如果您使用多个分支机构,并在分支机构之间进行合并或者重新集成(SVN术语),那么您将了解Git优于SVN的优势。
自从Google代码关闭以来,我最近将我的Google Code项目移到了Github,所以我想写一篇关于SVN到Git Migration的教程。
首先,我们将研究使用Git本机命令将SVN信息库迁移到Git信息库,然后看看有哪些缺点,然后我们将使用SVN2Git工具执行相同的操作。
SVN和Git存储库详细信息:
SVN信息库:我已经在线创建了一个公共信息库,其URL为
https://pl6.projectlocker.com/theitroad/JDProject/svn
。
下图显示了目录结构,注意我有一个带有主干,分支和标签的标准目录结构。
我还创建了一个另外的文件(README.txt),该文件不在此目录层次结构中。GIT存储库:我正在使用Github作为我的存储库。
它是免费使用的,我的项目git URL是https://github.com/hyman0323/JDProjects.git
用于SVN到Git迁移的Git本机命令
- 第一步是从SVN提交创建authors文件,下面是该命令。
我们需要此文件进行git迁移。
这是一个很大的命令,请确保将所有这些都放在一个命令中。
之后,您将拥有authors.txt文件,其中将包含已向该SVN项目提交代码的所有作者详细信息。
查找创建项目的修订号。
使用以下命令:
您将获得第一个修订版本号,如果您有一个较大的项目并具有发行周期,并且要从特定发行版中导入,则该版本号可能有所不同。
对我来说是1,因为我刚刚为本教程创建了这个示例SVN项目。运行以下命令以使用git svn clone将SVN项目转换为Git。
在创建项目存储库时使用修订号。
传递–no-minimize-url将允许git svn照原样接受URL,而无需尝试连接到更高级别的目录。
有关其他选项,请阅读git-svn文档。您将创建项目目录,进入该目录并添加远程git url作为源。
将SVN分支转换为Git分支:如果此时将列出分支,则将得到类似以下的内容。
Git svn clone命令使主节点从准备就绪的主节点推送到远程git存储库。
但是我们也想推动分支机构。
为此,请使用以下命令:
迁移标签:Git svn clone命令不会创建标签,请按照以下命令创建标签,并使它们准备好推送到远程。
将Git分支和标签推送到远程:我的master,分支和标签已准备好推送,请使用下面的git push`命令将它们发布到远程存储库。
而已。
我们已将SVN项目移至Git。
虽然这个过程似乎很容易,但是git svn clone
有两个缺点。
它不会为我们创建分支以推送到远程存储库。
涉及手动工作,假设您有20个分支。
创建分支将花费大量时间,并且可能会出现错误或者错别字。不支持标签,我不得不将标签签出为分支,然后从中创建标签。
这不像将标签从SVN移到Git。
使用svn2git工具将SVN迁移到GIT
svn2git工具使用本机命令解决了以上两个问题。
在使用此工具之前,需要先安装它。
它需要安装git,git-svn和ruby。
svn2git是git通过svn支持git本地SVN的红宝石包装。
您可以使用以下命令安装必备组件。
$svn log -q https://pl6.projectlocker.com/theitroad/JDProject/svn | awk -F '|' '/^r/{sub("^ ", "", ); sub(" $", "", ); print " = "" <"">"}' | sort -u > authors.txt
- 一旦在系统上安装了必要的软件,就可以通过rubygems安装svn2git,这会将svn2git命令添加到PATH中。
一旦安装了svn2git,请使用以下命令将SVN存储库迁移到Git。
首先使用上述命令创建authors文件。
从上面的svn log命令中找到初始的svn修订版。
使用以下命令从svn存储库创建本地git项目。
将分支和标签推送到远程Git存储库:您会注意到svn2git已经创建了Git分支和标签供您推送到远程。
只需添加远程源,然后将想要的任何分支和标签推送到远程存储库即可。
我们已经使用svn2git工具将SVN信息库迁移到Git。
svn2git可以使用多种选项,例如–如果您不想迁移标签,则使用-notags。
请浏览svn2git用法部分以了解各种选项。
还要注意,不是标准svn结构一部分的README.txt文件不会被迁移。