Я пробовал несколько различных методов (включая расширение Convert , которое, как я обнаружил, создало несвязанный репозиторий). Вики Mercurial для истории редактирования с использованием MQ были наиболее полезными. (Конечно, существуют обычные предостережения о том, что редактирование любой общеизвестной истории является плохой идеей, но локальные изменения, которые могут быть только у вас, можно редактировать).
Я кратко опишу здесь важные этапы и поясню механизм смены автора. Предполагая, что первая неправильная фиксация автора находится на ревизии BAD
(и вы, конечно, нигде не публиковали свои изменения), вы должны быть в состоянии сделать следующее (я предполагаю, что вы находитесь в корне хранилища):
Включить MQ, добавив это в $ HOME / .hg / hgrc
[extensions]
hgext.mq=
Преобразование последних изменений в патчи:
$ hg qimport -r BAD:tip
(теперь их можно найти на .hg/patches
)
«Отменить» все патчи (предположим, что они были применены, и отменить их), чтобы ваш репозиторий перешел в состояние ревизии до BAD
:
$ hg qpop -a
Если вы посмотрите на свои патчи, то увидите, что автор закодирован в виде строки комментария во всех патчах:
$ grep User .hg/patches/*
.hg/patches/102.diff:# User Firstname Lastname <f.lastname@oops.wrongurl.example.com>
Теперь используйте ваш любимый инструмент поиска / замены, чтобы исправить патчи (я использую Perl здесь). Предположим, вы хотите, чтобы имя коммита было f.lastname@righturl.example.com
:
$ perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com/' .hg/patches/*.diff
Теперь убедитесь, что вы успешно изменили имя автора, и повторно примените патчи:
$ hg qpush -a
Затем преобразуйте примененные патчи в правильные наборы изменений:
$ hg qfinish -a
И все готово. Ваш репозиторий по-прежнему указан как связанный, поэтому вы не получите никаких претензий по поводу отправки.