Могу ли я изменить имя пользователя в наборе меркурийных изменений?

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

Ответ 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. Побочным эффектом является также временная метка фиксации.