我已经在我的 windows server 2012 r2 上安装了scm-manager 1.45 作为服务。
我有一个颠覆存储库转储文件。我设法将它导入到 scm-manager 中的 subversion repo。但我真的很想将它迁移到 git 存储库,但我似乎无法弄清楚如何。我希望所有的提交历史都遵循。
我已经在我的 windows server 2012 r2 上安装了scm-manager 1.45 作为服务。
我有一个颠覆存储库转储文件。我设法将它导入到 scm-manager 中的 subversion repo。但我真的很想将它迁移到 git 存储库,但我似乎无法弄清楚如何。我希望所有的提交历史都遵循。
确保您在 SCM-manager 存储库所在的位置具有读/写权限。
在您用来保存共享存储库的工具之外,svn-git 和一些命令行魔法可以解决您的问题
我假设迁移是从类 Unix 系统完成的,例如 Linux、mac 甚至在 windows 机器上运行的cygwin ;如果您没有可用的正确cygwin安装,您可以尝试在 Windows 平台中使用与msysgit一起安装的“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>
这一步很重要,因为 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 命令的详细解释)
此步骤可能需要一段时间(它会逐一详细说明 SVN 增量中的 git 历史记录),但是当它完成后,您的 SVN 存储库的 git 版本将在您的主目录中的svn-git-migration
文件夹中(在命令,如果你愿意)
注意:这些命令需要在新的 git 存储库中执行,因此您需要移动到您在上一步中克隆了 repo 的文件夹
Subversion 不像 git 那样处理标签;Git tahs 只针对单个提交(一个 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 服务器存储库添加为远程,在这里您可能会找到一些帮助。