0

我已经在我的 windows server 2012 r2 上安装了scm-manager 1.45 作为服务。

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

4

2 回答 2

1

确保您在 SCM-manager 存储库所在的位置具有读/写权限。

  1. 在 SCM 管理器存储库所在的位置创建新目录 MyProject;
  2. 走进我的项目;
  3. 执行命令git svn clone theURLfromSCMmanagerSvnRepo
  4. 通过 SCM-manager "Import repositories" 添加新的存储库 --> 在 Repository Import Wizard 中选择 Git --> 从目录导入。
  5. 它现在应该检测到您的新存储库。
于 2015-04-27T12:31:33.260 回答
1

在您用来保存共享存储库的工具之外,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 分支命名法,它会正常工作,如果不是这种情况,您需要向 git-svn 指明您的“文件夹”的名称通过将参数替换为以下内容创建了分支--stdlayout

  • -T(用于主干路径)

  • -b(用于分支路径)

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

(你可以在这里找到关于 git-svn clone 命令的详细解释)

此步骤可能需要一段时间(它会逐一详细说明 SVN 增量中的 git 历史记录),但是当它完成后,您的 SVN 存储库的 git 版本将在您的主目录中的svn-git-migration文件夹中(在命令,如果你愿意)


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

注意:这些命令需要在新的 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 服务器存储库添加为远程,在这里您可能会找到一些帮助。

于 2015-04-23T14:50:30.990 回答