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


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

4 62

4 ответа:

Если вы не опубликовали свой репозиторий, то это не должно быть слишком жестким. Вы должны использовать конвертировать расширение к Mercurial, что позволит вам "фильтровать"существующий репозиторий для создания нового. параметр --authors позволяет редактировать автора для каждой фиксации по мере ее фильтрации.

Если вы есть опубликовал свой репозиторий, пожалуйста, рассмотрите влияние на ваших пользователей, mercurial wiki имеет некоторые причины не изменять история.

включите расширение, добавив эти строки в свой .hgrc:

[extensions]
hgext.convert=

напишите файл для сопоставления старого имени с новым именем (авторы.конвертировать.список):

user@ubuntu=real.name@my.example.com

выполнить преобразование:

hg convert --authors authors.convert.list SOURCE DEST

Я только что проверил, это работает для меня :).

Я пробовал несколько разных методов (в том числе Конвертировать Расширение, Я создал не в тот репозиторий). Инструкции 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 <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

и вы сделали. Ваш репозиторий по-прежнему указан как связанный, поэтому вы не получите никаких жалоб на нажатие.

Если у вас один исходящего набора, есть очень простой способ сделать это:

$ hg ci --amend --user "My Name <mymail@example.org>" -X "**"

The -X "**" опция может быть опущена, если у вас нет никаких локальных изменений.

я использовал histedit расширение, которое позволило мне изменить автора без создания новых репозиториев, таких как" конвертировать "или прибегать к"mq".

во-первых, в вашем файле конфигурации Mercurial убедитесь, что ваше имя пользователя установлено правильно и включите расширение histedit:

[ui]
username = Your Name <your.name@domain.org>

[extensions]
histedit =

затем, если вы хотите изменить ревизию 40, используйте:

hg histedit -r 40

в появившемся файле в строке, соответствующей редакции 40, измените слово pick до edit. Сохранить и закрыть файл.

теперь hg commit. Вам нужно будет повторно ввести сообщение фиксации и сохранить.

наконец, hg histedit --continue.

фиксация появится с вашим новым username. Побочным эффектом является то, что метка времени фиксации также обновляется.