只使用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。