繁体   English   中英

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

[英]Is there a way to change a SVN users username through the entire repository history?

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

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

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

例如,我希望将当前归因于Mike的所有提交更改为msmith,一直到版本1。

我首先想到的是,我必须对转储文件进行一些解析和处理,但是使用工具会很好。

您可以使用svndumptool

svnadmin转储路径/到/我/回购> repo.dump

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

TortoiseSVN对此功能提供了出色的支持:在其“ 修订日志”对话框中,可以按作者(甚至通过正则表达式)进行过滤,根据需要从过滤列表中选择修订(通常都是与本问题类似),然后从上下文中选择“编辑作者”菜单。

当然,如jeroenhs的回答中所述,有一个预先准备好的翻新钩子的前提条件仍然适用。

该处理是相当缓慢的,但根据需要的人这可能仍然是更快和/或更方便的然后有倾倒整个仓库,并处理与脚本这些潜在的巨大转储文件(S)。

就在这里:

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

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

exit 0

如果已设置,则您应该能够编写满足您需求的脚本。

编辑:我没有对此进行测试,但是我认为这应该可以在PowerShell中完成:

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

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

echo -n "msmith" > msmith.txt
svn log /svn -q | grep '^r[0-9]* | 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)查找行。 注意:在大多数情况下,像grep Mike就可以了,但是如果您有一个名为Jul的用户,则您可能会冒险更新7月份的每次提交(或多或少的风险取决于您的语言环境)
  4. 过滤掉除第一个字段(修订号)(剪切)以外的所有内容
  5. 在步骤4(xargs)中找到的每个修订版上运行svnadmin命令。 每次执行命令(-n1)仅传递一个修订版本。 它将用msmith.txt文件的内容替换svn:author属性。

雷霆下面的USS倒钩在二战的故事,新的官员来到船上。 队长问他名字。 “迈克”,他回答。 “不,我们已经有了迈克”,机长说。 “我们叫你罗伯特。在战斗中,当我发出命令时,我在和谁说话不会有任何困惑。”

我要说的是让您的新Mike选择另一个名字的先例。

花了很多时间,但我最终找到了一个针对SVN转储文件的perl脚本。

今天早上,我在存储库的转储上尝试了此程序,它运行正常。

这是直接链接

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

但是自从SVN 0.x天以来,我还没有真正研究过SVN的内部功能,所以我可能会离开...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM