Сменить автора старых коммитов в Subversion - PullRequest
26 голосов
/ 13 февраля 2012

У меня есть пользователь, которого до сегодняшнего дня называли foo.bar .Теперь этот пользователь будет известен как fb .Но я хотел бы обновить все старые коммиты, чтобы отражать это имя пользователя вместо старого по статистическим причинам и т. Д. Как это можно сделать?

Я знаю о синтаксисе

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

Но это потребует много ручного труда.Существует ли существующая функция или скрипт, который просто берет имя для замены и имя для его замены?

Обновление:

Вот небольшой скрипт, который я сделал длясправьтесь с этим, так как я буду делать это на многих репозиториях для многих пользователей :) Просто запустите его в выбранной вами папке с репозиторием.Обратите внимание, что обработка ошибок в скрипте минимальна.

https://github.com/inquam/svn-rename-author

Ответы [ 4 ]

20 голосов
/ 13 февраля 2012

Вы можете создать команду для получения ревизий в журнале, которые old_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 на соответствующее значение ревизии.

3 голосов
/ 05 марта 2014

Вставьте следующее в ваш 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
0 голосов
/ 14 февраля 2012

Я проверял это до последней команды system.(Я не хотел менять свой репозиторий), но эта Perl-программа должна работать:

#! /usr/bin/env perl
#

use strict;
use warnings;
use feature qw(say);
use autodie;   #Don't have to test if open fails

use constant {
    SVN      => "svn",
    REPOS    => "http://source/src/myrepo",
    OLD_NAME => "dbrown",
    NEW_NAME => "db",
};

open (my $log, "-|", LOG_CMD);

while (my $line = <$log>) {
    chomp $line;

    #
    # Is this a revision line?
    #

while (my $line = <$log>) {
    chomp $line;
    next unless $line =~ /^r       #Line starts with an "r"
                         (\d+)     #Followed by digits (Capture)
                         \s\|\s    #And a "|" separator
                         ([^\|]+)  #This should be the name (Capture)
                         \s+\|     #And another separator
                         /x;
    my $revision = $1;
    my $author = $2;
    next unless $author eq OLD_NAME;

    #
    # Found the Author
    #
    my $command = qq(@{[SVN]} -r $revision pset --revprop svn:author @{[NEW_NAME]});
    my $error = system $command;
    say STDERR qq(Couldn't modify revision $revision) if $error;
}
0 голосов
/ 13 февраля 2012
  1. svnadmin dump
  2. Редактировать дамп-файл
  3. Убить старого репо
  4. Создание новых и svnadmin load отредактированных данных
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...