私信  •  关注

community wiki 2 revs thoutbec

community wiki 2 revs thoutbec 最近创建的主题
community wiki 2 revs thoutbec 最近回复了
12 年前
回复了 community wiki 2 revs thoutbec 创建的主题 » 如何将具有历史记录的SVN存储库迁移到新的Git存储库?

只使用git、svn和bash的扩展回答。它包括SVN存储库的步骤,这些步骤不使用传统布局和主干/分支/标签目录布局(SVN完全不执行这种布局)。

首先,使用此bash脚本扫描SVN repo以查找贡献的不同人员,并生成映射文件的模板:

#!/usr/bin/env bash
authors=$(svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
for author in ${authors}; do
  echo "${author} = NAME <USER@DOMAIN>";
done

使用此项创建 authors 将svn用户名映射到用户名的文件,并使用 git config 性质 user.name user.email (请注意,对于像github这样的服务,只有匹配的电子邮件就足够了)。

然后有 git svn 将SVN存储库克隆到Git存储库,告诉它有关映射的信息:

git svn clone --authors-file=authors --stdlayout svn://example.org/Folder/projectroot

这可能需要非常长的时间,因为GitSvn将为每个存在的标记或分支单独检查每个修订。(请注意,SVN中的标记实际上是分支,因此它们最终会出现在Git中)。您可以通过删除不需要的SVN中的旧标记和分支来加快速度。

在同一个网络或同一个服务器上运行此命令也可以真正加快速度。另外,如果由于某种原因,这个过程被中断,那么 可以 重新使用它

git svn rebase --continue

在很多情况下,你都在这里完成了。但是,如果您的SVN回购有一个非常传统的布局,您只需在SVN中有一个目录,您希望将其放入Git分支,那么您可以执行一些额外的步骤。

最简单的方法是在服务器上创建一个新的SVN repo,它遵循约定并使用 svn copy 把目录放在主干或分支中。如果您的目录一直在repo的根目录中,这可能是唯一的方法,当我上次尝试此方法时 GIT-SVN 只是拒绝结账。

你也可以用git来实现。为了 git svn clone 只需使用要放入Git分支的目录。

运行后

git branch --set-upstream master git-svn
git svn rebase

请注意,这需要1.7或更高的Git。