当我的团队第一次开始了与SVN,我们都犯时库,但是,现在,我们的队伍不断壮大,我们遇到了问题,因为我们刚刚聘请了第二只用我们的名字Mike
。
我们希望做的是改变每个人的用户名是相同的计算机上的用户名(名字初始+姓)。 那我看到的问题是,SVN历史上还是会显示在提交旧的用户名。
是否有一个工具,在那里为整个仓库的整个历史记录变更的用户名?
例如,我想每一个承诺目前归给麦克更改为msmith,回到修订版1的所有道路。
我首先想到的是我必须做一个转储文件的一些分析和处理,但工具将是很好。
您可以使用svndumptool :
svnadmin的转储路径/要/我的/回购> repo.dump
svndumptool变换版本属性的svn:作者originalregexp NEWVALUE repo.dump newrepo.dump
TortoiseSVN的有这个功能很好的支持:其内部版本日志对话框可以由作者(甚至通过正则表达式)从上下文过滤器,从按需要(一般都喜欢在这个问题上)的过滤列表中选择修改,然后选择“编辑作者”菜单。
具有的前期状态的pre-revprop-change钩子在jeroenhs提到到位答案并仍然适用,当然。
该处理是相当缓慢的,但根据需要的人,这可能仍然是更快和/或更方便的然后有倾倒整个仓库,并处理与脚本这些潜在的巨大转储文件(S)。
就在这里:
svn propset --revprop -r revision_number svn:author new_username
然而,SVN不允许通过更改默认版本属性。 你需要建立一个的pre-revprop-change钩子脚本了点。 在Windows上,它足以把一个bat文件在你的仓库,简单地包含一行的钩子文件夹:
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 Mike | cut -f 1 -d' ' | xargs -n1 svnadmin setrevprop /svn svn:author msmith.txt -r
下面是这是这样做的:
- 在最后存放在没有换行文件的新的用户名(回声-n)
- 获得完整的日志中/ SVN仓库,只显示摘要信息(而不是日志消息)(SVN日志-q)
- 找到与麦克行(grep的)
- 过滤掉除第一场一切(修订#)(切)
- 在步骤4(xargs的)中找到的每个版本运行svnadmin的命令。 仅通过每命令(-n1)的执行的一个版本。 与msmith.txt文件的内容author属性:这将取代SVN。
在雷霆下面的USS倒钩在二战的故事,新的官员来到船上。 船长问他他的名字。 “迈克”,他回答。 “不,我们已经拥有了迈克”船长说。 “我们会打电话给你罗伯特。在战斗中,当我召唤出订单,不能有任何关于谁我说的混乱。”
什么我得到的是,有制造新的麦克选择另一个名称的先例。
它采取了找了很多,但我终于找到一个Perl脚本,针对SVN转储文件的工作。
今天早上我试图在我的资料库的转储和它完美地工作。
这里是直接链接
从内存,标准答案SVN改变历史的事情是做数据库的转储文本,通过它可以搜索,替换和重新创建数据库。
但是我还没有真正看着SVN的,因为它的0.X天的内部,所以我可能会关闭......
文章来源: Is there a way to change a SVN users username through the entire repository history?