有没有办法在整个存储库历史记录中更改SVN用户的用户名?

时间:2009-07-28 16:49:55

标签: svn repository history rename

当我的团队刚开始使用SVN时,我们在提交到存储库时只使用了我们的名字,但是,现在我们的团队已经成长,我们遇到了问题,因为我们刚刚雇用了第二个Mike

我们想要做的是将每个人的用户名更改为与其计算机上的用户名相同(名字首字母+姓氏)。我看到的问题是SVN历史记录仍然会在提交时显示旧的用户名。

在整个存储库的整个历史记录中是否有用于更改用户名的工具?

例如,我希望当前归于Mike的每个提交都更改为msmith,一直返回到修订版1。

我的第一个想法是我必须对转储文件进行一些解析和处理,但是工具会很好。

7 个答案:

答案 0 :(得分:20)

您可以使用svndumptool

  

svnadmin dump path / to / my / repo> repo.dump

     

svndumptool transform-revprop svn:author originalregexp newvalue   repo.dump newrepo.dump

答案 1 :(得分:13)

TortoiseSVN对此功能提供了极好的支持:在其Revision Log Dialog内可以按作者过滤(甚至通过正则表达式),根据需要从过滤列表中选择修订版(通常在此问题中都是如此)并从上下文菜单中选择“编辑作者”。

当然,在jeroenhs pre-revprop-change hook中提到answer的前提条件仍适用。

处理速度相当慢,但根据需要,这可能仍然太多更快和/或更方便,然后必须转储整个存储库并处理这些可能很大的转储文件与脚本。

答案 2 :(得分:12)

是的,有:

svn propset --revprop -r revision_number svn:author new_username

但是,svn默认情况下不允许更改修订版本属性。您需要为此设置pre-revprop-change hook script。在Windows上,只需将bat文件放在存储库的hooks文件夹中,该文件夹只包含一行:

exit 0

如果已设置,您应该能够根据需要编写脚本。

编辑:我没有通过测试,但我认为这应该在PowerShell中完成:

([xml] ( svn log --xml )).log.logentry 
   | ? {$_.author -eq "Mike"} 
   | foreach {svn propset --revprop -r $_.revision svn:author msmith}

答案 3 :(得分:6)

在存储库服务器上,您可以:

echo -n "msmith" > msmith.txt
svn log /svn -q | grep Mike | cut -f 1 -d' ' | xargs -n1 svnadmin setrevprop /svn svn:author msmith.txt -r

这是正在做的事情:

  1. 将新用户名存储在最后没有换行符的文件中(echo -n)
  2. 在/ svn中获取存储库的完整日志,仅显示摘要信息(不是日志消息)(svn log -q)
  3. 使用Mike(grep)
  4. 查找行
  5. 过滤除第一个字段(修订版#)(剪切)
  6. 以外的所有内容
  7. 对步骤4(xargs)中找到的每个修订运行svnadmin命令。每次执行命令(-n1)只传递一个修订版。这将使用msmith.txt文件的内容替换svn:author属性。

答案 4 :(得分:3)

Thunder Below中,第二次世界大战中的美国武装倒钩的故事,一名新军官登上了船上。船长问他的名字。 “迈克”,他回应道。 “不,我们已经有了迈克”,船长说。 “我们会叫你罗伯特。在战斗中,当我发出命令时,对我说话的人不会产生混淆。”

我所得到的是让新迈克选择其他名字的先例。

答案 5 :(得分:2)

看了很多,但我最终找到了一个可以对付SVN转储文件的perl脚本。

今天早上我在我的存储库的转储上尝试了它,它运行得很完美。

Here is the direct link

答案 6 :(得分:-2)

从内存中,标准SVN回答更改历史记录中的任何内容是对数据库进行文本转储,通过它进行搜索替换并从中重新创建数据库。

但是自从它的0.x天以来我没有真正看过SVN的内部结构,所以我可能会离开......