我一直在努力找出将大型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并意识到我可以创建一个作者文件来重命名所有作者。但我不知道如何从svn日志中自动返回所有作者并将它们哈希到作者文件中。在这种情况下,每个作者的手动输入都不是可行的解决方案。
谁能告诉我如何最好地做到这一点?
git svn
有两种方法可以破坏SVN作者的名字:--authors-file
和--authors-prog
。后者允许您提供将为每个未知作者调用的脚本,您可以返回哈希值。该脚本可以计算哈希值,输出哈希值(请参阅链接文档以获取预期响应格式的详细信息)并将该映射存储在其他文件中。
这样你就不需要自己解析svn中的作者了 - git svn
会为你做这件事。
这是我在转换我的存储库时用来获取作者的1-liner:
svn log --xml "$svn-url" | grep -F author | sort -u | sed 's/^<[^>]\+>\(.\+\)<.\+>$/\1 = /' >>authors.txt
然后你可以编辑authors.txt
并用散列标识符替换每个作者。那不是
author1 = Name1 <Email1>
author2 = Name2 <Email2>
你要
author1 = Hash1
author2 = Hash2