1. Migrating from SVN to GitLab

原文:https://docs.gitlab.com/ee/user/project/import/svn.html

2. Migrating from SVN to GitLab

Subversion(SVN)是中央版本控制系统(VCS),而 Git 是分布式版本控制系统. 两者之间有一些主要区别,有关更多信息,请咨询您喜欢的搜索引擎.

2.1. Overview

SVN 到 Git 迁移的方法有两种:

  1. Git/SVN Mirror which:

    • 使 GitLab 存储库镜像 SVN 项目.
    • Git 和 SVN 存储库保持同步; 您可以使用任何一个.
    • 简化迁移过程并允许管理迁移风险.
  2. Cut over migration which:

    • 将现有数据和历史记录从 SVN 转换并导入到 Git.
    • 是一劳永逸的方法,对较小的团队有用.

2.2. Smooth migration with a Git/SVN mirror using SubGit

SubGit是用于平稳,无压力的 SVN 到 Git 迁移的工具. 它创建本地或远程 Subversion 存储库的可写 Git 镜像,并且您可以根据需要同时使用 Subversion 和 Git. 它需要直接在文件系统级别与 Git 存储库通信时访问您的 GitLab 服务器.

2.2.1. SubGit prerequisites

  1. 安装 Oracle JRE 1.8 或更高版本. 在基于 Debian 的 Linux 发行版上,您可以阅读本文 .
  2. https://subgit.com/download下载 SubGit.
  3. 将下载的 SubGit zip 存档解压缩到/opt目录. subgit命令将在/opt/subgit-VERSION/bin/subgit .

2.2.2. SubGit configuration

在 GitLab 中镜像 SVN 存储库的第一步是创建一个新的空项目,该项目将用作镜像. 对于 Omnibus 安装,默认情况下,存储库的路径将位于/var/opt/gitlab/git-data/repositories/USER/REPO.git . 对于从源安装,默认的存储库目录将是/home/git/repositories/USER/REPO.git . 为方便起见,将此路径分配给变量:

GIT_REPO_PATH=/var/opt/gitlab/git-data/repositories/USER/REPOS.git 

SubGit 将使该存储库与远程 SVN 项目保持同步. 为了方便起见,请将您的远程 SVN 项目 URL 分配给一个变量:

SVN_PROJECT_URL=http://svn.company.com/repos/project 

接下来,您需要运行 SubGit 来设置 Git / SVN 镜像. 确保代表拥有 GitLab Git 存储库所有权的同一用户运行以下subgit命令(默认情况下为git ):

subgit configure --layout auto $SVN_PROJECT_URL $GIT_REPO_PATH 

如有必要,请调整作者和分支机构的映射. 用您喜欢的文本编辑器打开:

edit $GIT_REPO_PATH/subgit/authors.txt
edit $GIT_REPO_PATH/subgit/config 

有关 SubGit 配置选项的更多信息,请参阅SubGit 文档网站.

2.2.3. Initial translation

现在,SubGit 已经配置了 Git / SVN 存储库,运行subgit来执行将现有 SVN 修订版初始转换为 Git 存储库的操作:

subgit install $GIT_REPO_PATH 

初始翻译完成后,Git 存储库和 SVN 项目将通过subgit保持同步-新的 Git 提交将转换为 SVN 修订版,而新的 SVN 修订版将转换为 Git 提交. Mirror 透明地工作,不需要任何特殊命令.

如果您希望使用subgit执行一次性迁移,请使用import命令而不是install

subgit import $GIT_REPO_PATH 

2.2.4. SubGit licensing

以镜像模式运行 SubGit 需要注册 . 开源,学术和启动项目免费注册.

2.2.5. SubGit support

对于与 SubGit 的 SVN 到 GitLab 迁移有关的任何问题,您可以直接通过support@subgit.com与 SubGit 团队联系 .

2.3. Cut over migration with svn2git

如果当前正在使用 SVN 存储库,则可以将该存储库迁移到 Git 和 GitLab. 我们建议您进行一次硬性转换-运行一次迁移命令,然后让所有开发人员立即开始使用新的 GitLab 存储库. 否则,很难保持双向同步更改. 转换过程应在本地工作站上运行.

安装svn2git . 在所有系统上,如果已经安装了 Ruby 和 Git,则可以作为 Ruby gem 安装.

sudo gem install svn2git 

在基于 Debian 的 Linux 发行版上,您可以安装本机软件包:

sudo apt-get install git-core git-svn ruby 

(可选)准备一个 authors 文件,以便svn2git可以将 SVN 作者映射到 Git 作者. 如果您选择不创建作者文件,则提交将不会归因于正确的 GitLab 用户. 有些用户可能不会认为这是一个大问题,而另一些用户则希望确保他们完成此步骤. 如果选择映射作者,则将需要映射 SVN 信息库中的更改中存在的每个作者. 否则,转换将失败,您将必须相应地更新作者文件. 以下命令将搜索存储库并输出作者列表.

svn log --quiet | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq 

使用最后一条命令的输出来构造作者文件. 创建一个名为authors.txt的文件,并在每行添加一个映射.

janedoe = Jane Doe <janedoe@example.com>
johndoe = John Doe <johndoe@example.com> 

如果您的 SVN 储存库为标准格式(主干,分支,标签,而非嵌套),则转换很简单. 对于非标准存储库,请参见svn2git 文档 . 以下命令将检出存储库并在当前工作目录中进行转换. 在运行svn2git命令之前,请确保为每个存储库创建一个新目录. 转换过程将需要一些时间.

svn2git https://svn.example.com/path/to/repo --authors /path/to/authors.txt 

如果您的 SVN 信息库需要用户名和密码,请在上述命令中添加--username <username>--password <password>标志. svn2git还支持排除某些文件路径,分支,标签等.请参阅svn2git 文档或运行svn2git --help以获取有关所有可用选项的完整文档.

创建一个新的 GitLab 项目,您最终将在其中推送转换后的代码. 从项目页面复制 SSH 或 HTTP(S)存储库 URL. 将 GitLab 存储库添加为 Git 远程,并推送所有更改. 这将推送所有提交,分支和标签.

git remote add origin git@gitlab.com:<group>/<project>.git
git push --all origin
git push --tags origin 

2.4. Contribute to this guide

我们欢迎所有将扩展本指南的贡献,其中包括有关如何从 SVN 和其他版本控制系统进行迁移的说明.

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2023-08-17 12:04:10
鼓励一下

results matching ""

    No results matching ""