从 svn repo 检查每个版本并使用散列的提交者 ID 提交到新的 repo

checkout every version from svn repo and commit to new repo with hashed committer ids

我一直在努力寻找将大型 svn 存储库复制到新 svn 或 git 存储库的最佳方法,其中包含所有原始修订和元数据(时间戳、提交评论等)除了,我想获取日志中的提交者字段并对其进行哈希处理。这是因为我将分析日志并需要隐藏提交者的姓名,但又可以相互识别(即,我不能只是删除它们或将它们更改为 "x")。

到目前为止,我已经尝试过几种方法,但我正在努力让它发挥作用。

我考虑过的一种方法是像这样循环

get current svn revision
print log
take all fields & use as input to git commit |
pass committer id through sha1sum first
git commit
revision = current revision -1

我还查看了 git-svn 并意识到我可以创建一个作者文件来重命名所有作者。但我不知道如何自动 return 来自 svn 日志的所有作者并将它们散列到作者文件中。在这种情况下,每个作者的手动输入不是可行的解决方案。

谁能告诉我如何最好地做到这一点?

这是我在转换我的作品时用来获得作者的 1-liner 存储库:

svn log --xml "$svn-url" | grep -F author | sort -u | sed 's/^<[^>]\+>\(.\+\)<.\+>$/ = /' >>authors.txt

然后您可以编辑 authors.txt 并用哈希值替换每个作者 身份标识。那不是

author1 = Name1 <Email1>
author2 = Name2 <Email2>

你想要

author1 = Hash1
author2 = Hash2

git svn 两种 处理 SVN 作者姓名的方法:--authors-file and --authors-prog 。后者允许您提供一个将为每个未知作者调用的脚本,您可以 return 您的哈希。该脚本可以计算哈希值、输出哈希值(有关预期响应格式的详细信息,请参阅链接文档)并将该映射存储在其他文件中。

这样您就不需要自己从 svn 解析作者 - git svn 会为您完成。