Подтвердить что ты не робот

Есть ли способ изменить имя пользователя SVN по всей истории хранилища?

Когда моя команда впервые начала работать с SVN, мы все просто использовали наши первые имена при записи в репозиторий, однако теперь, когда наша команда выросла, у нас возникают проблемы, потому что мы просто наняли вторую Mike.

Что мы хотели бы сделать, так это изменить все имена пользователей на то же, что и имя пользователя на своем компьютере (имя и фамилия initial + last name). Проблема, которую я вижу, заключается в том, что в истории SVN все еще будут отображаться старые имена пользователей при фиксации.

Есть ли инструмент для изменения имен пользователей на протяжении всей истории репозитория?

Например, мне бы хотелось, чтобы каждый коммит, который в настоящее время приписывается Майку, переключается на msmith, все возвращается к ревизии 1.

Моя первая мысль заключается в том, что мне придется выполнять парсинг и обработку файла дампа, но инструмент будет приятным.

4b9b3361

Ответ 1

Это заняло много времени, но в итоге я нашел perl script, который работает против файла дампа SVN.

Я пробовал это сегодня утром на свалке моего хранилища, и он работал безупречно.

Вот прямая ссылка

Ответ 2

Вы можете использовать svndumptool:

svnadmin dump path/to/my/repo > repo.dump

svndumptool transform-revprop svn: автор originalregexp newvalue repo.dump newrepo.dump

Ответ 3

TortoiseSVN имеет отличную поддержку для этой функции: внутри Диалоговое окно журнала изменений можно фильтровать по автору (даже с помощью регулярных выражений), выбирать ревизии из отфильтрованного списка по желанию (как правило, все как в этом вопросе) и выбрать "Редактировать автора" в контекстном меню.

Предварительное условие наличия pre-revprop-change hook на месте, как указано в jeroenhs answer все равно применяются, конечно.

Обработка довольно медленная, но в зависимости от потребностей она может быть намного быстрее и/или более удобной, чем необходимость сбрасывать весь репозиторий и обрабатывать эти потенциально огромные файлы дампа с помощью скрипты.

Ответ 4

да есть:

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

Однако svn не позволяет изменять свойства ревизии по умолчанию. Для этого вам нужно настроить pre-revprop-change hook script. В окнах достаточно положить bat файл в папку hooks вашего репозитория, который просто содержит одну строку:

exit 0

Если это настроено, вы должны написать script для своих нужд.

EDIT: я не проверял это, но я думаю, что это должно сделать трюк в PowerShell:

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

Ответ 5

На сервере репозитория вы можете:

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

Вот что это делает:

  • Сохраните новое имя пользователя в файле без новой строки в конце (echo -n)
  • Получить полный журнал для репозитория в /svn, отображая только сводную информацию (не сообщение журнала) (svn log -q)
  • Найти строки с помощью Mike (grep)
  • Отфильтровать все, кроме первого поля (ревизия #) (вырезать)
  • Запустите команду svnadmin для каждой ревизии, найденной на шаге 4 (xargs). Выполняйте только одну ревизию за выполнение команды (-n1). Это заменит свойство svn: author на содержимое файла msmith.txt.

Ответ 6

В Thunder Below, рассказ о USS Barb во Второй мировой войне, новый офицер приходит на борт. Капитан спрашивает его имя. "Майк", отвечает он. "Нет, у нас уже есть Майк", - говорит капитан. "Мы будем называть вас Робертом. В бою, когда я приказываю приказы, не может быть путаницы в том, с кем я разговариваю".

То, что я получаю, это то, что есть прецедент для того, чтобы ваш новый Майк выбрал другое имя.

Ответ 7

Из памяти стандартный SVN-ответ, чтобы изменить что-либо в истории, это сделать текстовый дамп базы данных, выполнить поиск-замените его и заново создать базу данных из этого.

Но я не смотрел на внутренности SVN с 0.x-дней, поэтому я мог бы отключиться...