将svn存储库迁移到scm-manager中的git存储库

时间:2015-04-23 14:24:04

标签: git svn repository migrate scmmanager

我在Windows Server 2012 r2上安装了scm-manager 1.45作为服务。

我有一个subversion存储库转储文件。 我设法将它导入scm-manager中的subversion repo。但我真的想将它迁移到git存储库,但我似乎无法弄清楚如何。我想要跟随所有提交历史。

2 个答案:

答案 0 :(得分:1)

在用于保存共享存储库的工具之外,svn-git和一些命令行魔法将解决您的问题

我认为迁移是从类Unix系统完成的,例如Linux,Mac甚至cygwin在Windows机器上运行;如果您没有正确的msysgit安装,可以尝试在Windows平台上使用随cygwin安装的'Git Bash'

1#获取SVN存储库的贡献者列表

将提交者列表提取到SVN存储库,为此,运行(从SVN存储库的根目录):

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt

它将创建一个包含作者列表的文件,如:

jsmith = jsmith <jsmith>

您需要将其修改为:

jsmith = John Smith <john.smith@evil_corporation.com>

此步骤是importat,因为git将在下一步中将SVN提交者ID转换为git提交者ID(请注意,如果您愿意,可以手动创建此文件)

2#将SVN存储库克隆为Git存储库

为此,执行:

git svn clone <SVN_repo_URL> -A authors-transform.txt --stdlayout ~/svn-git-migration

其中:

  • <SVN_repo_URL>是您的SVN存储库,authors-transform.txt是您刚刚创建的文件。

请注意,如果您使用SVN存储库布局的“标准”SVN分支命名法,它将正常工作,如果不是这样,您需要向git-svn指示“文件夹”的名称“通过将--stdlayout参数替换为:

来创建分支
  • -T(针对中继路径)

  • -b(对于分支路径)

  • -t(对于代码路径)参数

(您可以找到有关git-svn clone命令here的详细说明)

此步骤可能需要一段时间(它会逐一详细说明SVN增量中的git历史记录),但是当它完成时,您的SVN仓库的git版本将位于{{1}内的主目录中} folder(如果你愿意,可以在命令中指定任何其他路径)

3#将存储库(标签和主分支)结构转换为git

注意:这些命令需要在新的git存储库中执行,因此您需要移动到您在prev步骤中克隆了repo的文件夹

Subversion不像git那样处理标签; Git tahs被归为单个提交(git标签只包含提交ID),但SVN标签是分支的特殊之王,所以在这里,我们需要找到存储库标签分支(查看refs / heads / tags)和在所有这些标签的顶端贴上标签:

svn-git-migration

此外,我们需要重命名主分支(SVN中的主干进入git主分支'master'

git for-each-ref --format='%(refname)' refs/heads/tags |
cut -d / -f 4 |
while read ref
do
  git tag "$ref" "refs/heads/tags/$ref";
  git branch -D "tags/$ref";
done

现在只需将你的新/迁移的git存储库推送到你的git服务器(scmmanager?),你就完成了:-)。请记住,您需要将您的git服务器存储库添加为远程服务器here,您可以找到一些帮助。

答案 1 :(得分:1)

查看您具有SCM管理器存储库所在的读/写权限。

  1. 创建SCM-manager存储库所在的新目录MyProject;
  2. 进入MyProject;
  3. 执行命令 git svn clone theURL fromSCMmanagerSvnRepo ;
  4. 通过SCM-manager添加新存储库&#34;导入存储库&#34; - &gt;在存储库导入向导中选择Git - &gt;从目录导入。
  5. 它现在应该检测到您的新存储库。