我在Windows Server 2012 r2上安装了scm-manager 1.45作为服务。
我有一个subversion存储库转储文件。 我设法将它导入scm-manager中的subversion repo。但我真的想将它迁移到git存储库,但我似乎无法弄清楚如何。我想要跟随所有提交历史。
答案 0 :(得分:1)
在用于保存共享存储库的工具之外,svn-git和一些命令行魔法将解决您的问题
我认为迁移是从类Unix系统完成的,例如Linux,Mac甚至cygwin在Windows机器上运行;如果您没有正确的msysgit安装,可以尝试在Windows平台上使用随cygwin安装的'Git Bash'
将提交者列表提取到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(请注意,如果您愿意,可以手动创建此文件)
为此,执行:
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(如果你愿意,可以在命令中指定任何其他路径)
注意:这些命令需要在新的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管理器存储库所在的读/写权限。