Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 在Subversion中更改旧提交的作者_Svn - Fatal编程技术网

Svn 在Subversion中更改旧提交的作者

Svn 在Subversion中更改旧提交的作者,svn,Svn,我有一个用户,直到今天,一直被称为foo.bar。现在,从现在起,该用户将被称为fb。但是出于统计等原因,我想更新所有旧的提交以反映此用户名,而不是旧的用户名。如何做到这一点 我知道语法 svn propset --revprop -r revision_number svn:author your_username 但这需要大量的体力劳动。是否有一个现有的函数或脚本只接受要替换的名称和要替换的名称 更新: 下面是我为处理此问题而编写的一个小脚本,因为我将为许多用户在许多回购协议上执行此操作:

我有一个用户,直到今天,一直被称为foo.bar。现在,从现在起,该用户将被称为fb。但是出于统计等原因,我想更新所有旧的提交以反映此用户名,而不是旧的用户名。如何做到这一点

我知道语法

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