将svn存储库迁移到scm管理器中的git存储库



我在windows服务器2012 r2上安装了scm manager 1.45作为一项服务。

我有一个subversion存储库转储文件。我设法将其导入scm管理器中的subversion repo。但我真的很想把它迁移到git存储库中,但我似乎不知道如何迁移。我希望所有的承诺历史都能遵循。

除了你用来保存共享存储库的工具之外,svn-git和一点命令行魔法将解决你的问题

我假设迁移是从类Unix系统中完成的,例如Linux、mac,甚至是在windows机器中运行的cygwin;如果您没有合适的cygwin安装,您可以尝试在windows平台中使用与msysgit一起安装的"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>

这一步很重要,因为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分支命名法,它会很好地工作,如果不是这样,您需要通过将--stdlayout参数替换为来向git-SVN指示创建分支的"文件夹"的名称

  • -T(用于中继路径)

  • -b(用于分支路径)

  • -t(用于标签路径)参数

(您可以在此处找到有关git-svn-clone命令的详细解释)

这个步骤可能需要一段时间(它从SVN增量中逐一详细说明git历史),但当它完成时,SVN repo的git版本将在您的主目录svn-git-migration文件夹中(如果您愿意,请在命令中指定任何其他路径)


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

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

Subversion不像git那样处理标记;Git-ths被重新标记为一个提交(Git标记只包含一个提交ID),但SVN标记是一个特殊的分支之王,因此在这里,我们需要定位存储库标记分支(查看refs/heads/tags),并在所有分支的顶端应用一个标记:

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

此外,我们需要将主分支(SVN中的主干)重命名为git主分支"master">

git branch -m trunk master

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

请确保您在SCM管理器存储库所在的位置具有读/写权限。

  1. 创建SCM管理器存储库所在的新目录MyProject
  2. 进入MyProject
  3. 执行命令git-svn从SCMmanagerSvnRepo克隆URL
  4. 通过SCM管理器"导入存储库"-->在"存储库导入向导"-->"从目录导入"中选择Git来添加新存储库
  5. 它现在应该检测到您的新存储库

相关内容

  • 没有找到相关文章

最新更新