Svn 在Subversion中更改旧提交的作者
我有一个用户,直到今天,一直被称为foo.bar。现在,从现在起,该用户将被称为fb。但是出于统计等原因,我想更新所有旧的提交以反映此用户名,而不是旧的用户名。如何做到这一点 我知道语法Svn 在Subversion中更改旧提交的作者,svn,Svn,我有一个用户,直到今天,一直被称为foo.bar。现在,从现在起,该用户将被称为fb。但是出于统计等原因,我想更新所有旧的提交以反映此用户名,而不是旧的用户名。如何做到这一点 我知道语法 svn propset --revprop -r revision_number svn:author your_username 但这需要大量的体力劳动。是否有一个现有的函数或脚本只接受要替换的名称和要替换的名称 更新: 下面是我为处理此问题而编写的一个小脚本,因为我将为许多用户在许多回购协议上执行此操作:
svn propset --revprop -r revision_number svn:author your_username
但这需要大量的体力劳动。是否有一个现有的函数或脚本只接受要替换的名称和要替换的名称
更新:
下面是我为处理此问题而编写的一个小脚本,因为我将为许多用户在许多回购协议上执行此操作:)
只需在您选择的签出存储库文件夹中运行它。请注意,脚本中的错误处理最少
svnadmin转储
svnadmin加载
编辑的数据您可以生成一个命令来获取日志中的修订,该修订是
old\u username
提交的:
svn log | grep "^r[0-9]* | old_username |" | cut -c 2- | awk '{print $1}'
此命令获取日志,搜索每个修订开始时出现的行,从这些行中删除第一个字符(即r
),然后获取行的第一个剩余部分,即修订
您可以通过多种方式使用此信息。在bash
中,您可以使用以下命令使其生成svn propset
命令序列:
for f in `svn log | grep "^r[0-9]* | old_username |" | cut -c 2- | awk '{print $1}'`
do
svn propset --revprop -r $f svn:author your_username
done
它迭代第一个表达式创建的值(现在用反引号括起来),并将这些值用于
svn propset
命令,用适当的修订值替换$f
。直到最后一个系统
命令之前,我一直在测试这个值。(我不想更改我的存储库),但是这个Perl程序应该可以工作:
#/usr/bin/env perl
#
严格使用;
使用警告;
使用特征qw(例如);
使用自动模具#不必测试open是否失败
使用常数{
SVN=>“SVN”,
回购=>”http://source/src/myrepo",
旧名称=>“dbrown”,
新名称=>“db”,
};
打开(我的$log,“-|”,log_CMD);
while(我的$line=){
chomp$行;
#
#这是修订行吗?
#
while(我的$line=){
chomp$行;
除非$line=~/^r,否则下一行以“r”开头
(\d+)#后跟数字(捕获)
\s\|\s#和一个“|”分隔符
([^\|]+)#这应该是名称(捕获)
\s+\\\\和另一个分隔符
/x;
my$revision=$1;
我的$author=$2;
下一步除非$author eq OLD_NAME;
#
#找到作者
#
my$command=qq(@{[SVN]}-r$revision pset--revprop SVN:author@{[NEW_NAME]});
my$error=系统$command;
如果$error,则说STDERR qq(无法修改修订版$revision);
}
将以下内容插入pre-revprop-change.bat(通过在记事本中打开它)中的类似文件夹(取决于您的配置)
C:\ASP.NET Projecten\ProjectX\hooks
set magProperyWijzigen = false;
:: Only allow the log message and author to be changed.
if("%propertyName%" == "svn:author") magProperyWijzigen = true;
if("%propertyName%" == "svn:log") magProperyWijzigen = true;
if "%magProperyWijzigen%" == "false" goto ERROR_PROPNAME
borrible的方法比摆弄笨重的转储文件更安全、更容易。此外,subversion工具链不支持编辑转储文件。如果有适合此工作的工具,为什么要使用危险的方法?如何编辑转储文件?是手动还是自动执行此操作?OP知道如何更改t他没有关闭回购协议,也没有手动编辑转储文件(不建议这样做,因为错误的更改可能会破坏整个回购协议)。作者只是想找到一种自动化过程的方法。完美,正是我所寻找的解决方案类型。对noobs的提示(像我一样):在工作副本内部键入此项,而不是repo;)+1用于按预期工作的脚本(只需在每个
svn
命令末尾添加到我的repo的路径)。注意:必须激活pre revprop change
挂钩,并在revprop
命令上返回0