Я не установил имя пользователя на своем компьютере разработки и сделал несколько коммитов. Могу ли я ретроактивно изменить имя пользователя, чтобы он очистил, кто совершил эти изменения?
Могу ли я изменить имя пользователя в наборе меркурийных изменений?
Ответ 1
Если вы не опубликовали свой репозиторий, это не должно быть слишком сложно. Вы должны использовать Преобразовать расширение в Mercurial, что позволит вам "фильтровать" существующий репозиторий для создания нового. переключатель --authors позволяет редактировать автора для каждого фиксации по мере его фильтрации.
Если вы опубликовали свой репозиторий, подумайте о влиянии на своих пользователей, у mercurial wiki есть причины не редактировать историю.
Включите расширение, добавив эти строки в свой .hgrc:
[extensions]
hgext.convert=
Напишите файл для сопоставления старого имени с новым именем (authors.convert.list):
[email protected][email protected]
Запустите преобразование:
hg convert --authors authors.convert.list SOURCE DEST
Я только что проверил, это работает для меня:).
Ответ 2
Я пробовал несколько разных методов (в том числе Convert Extension, который я нашел, создал несвязанный репозиторий). Рекомендации Mercurial wiki для редактирования истории с использованием 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 <[email protected]>
Теперь используйте свой любимый инструмент поиска/замены, чтобы исправить исправления (я использую Perl здесь). Предположим, что вы хотите, чтобы имя фиксации было [email protected]
:
$ perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com/' .hg/patches/*.diff
Теперь проверьте, что вы успешно изменили имя автора и повторно применили исправления:
$ hg qpush -a
Затем преобразуйте примененные исправления в нужные изменения:
$ hg qfinish -a
И все готово. Ваш репозиторий по-прежнему отображается как связанный, поэтому вы не будете получать жалобы на то, что нажали.
Ответ 3
Если у вас есть один исходящий набор изменений, есть очень простой способ сделать это:
$ hg ci --amend --user "My Name <[email protected]>" -X "**"
Опция -X "**"
может быть опущена, если у вас нет локальных изменений.
Ответ 4
Я использовал расширение histedit
, которое позволило мне изменить автора, не делая новые репозиции, такие как "конвертировать", или прибегая к "mq".
Во-первых, в вашем файле конфигурации Mercurial убедитесь, что ваше имя пользователя установлено правильно и включите расширение histedit:
[ui]
username = Your Name <[email protected]>
[extensions]
histedit =
Затем, если вы хотите изменить версию 40, используйте:
hg histedit -r 40
В появившемся файле в строке, соответствующей ревизии 40, измените слово pick
на edit
. Сохраните и закройте файл.
Теперь hg commit
. Вам нужно будет повторно ввести сообщение о фиксации и сохранить.
Наконец, hg histedit --continue
.
Конец появится с вашим новым username
. Побочным эффектом является также временная метка фиксации.