Как бороться с изменением имени коммиттера в Mercurial

У меня есть проект в Mercurial с группой коммиттеров. К сожалению, некоторые из коммиттеров несколько раз меняли имена, например. сначала это было "прозвище", а затем оно стало "Имя Фамилия", а затем еще что-то.

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

Есть ли другие способы решения этой проблемы?

Ответ 1

Да, это возможно. Используйте Преобразовать расширение, а затем hg convert из репозитория с плохими именами в новый репозиторий с хорошими именами и используйте authormap. Есть много вещей, которые вы можете выполнить, используя расширение конвертации и преобразование из Mercurial в другое Mercurial repo.

Файл автозагрузки, предположим, что Eric Hopper <[email protected]> является каноническим именем автора:

Eric Hopper <[email protected]>=Eric Hopper <[email protected]>
Eric M. Hopper <[email protected]>=Eric Hopper <[email protected]>
Eric Hopper <[email protected]>=Eric Hopper <[email protected]>

Тогда:

hg convert -s hg -d hg --authormap authormap badnamesrepo goodnamesrepo

Примечание:, что при преобразовании hg в hg-репозиторий не всегда будет создано множество новых наборов изменений, в этом случае он будет, и они будут эквивалентны (но отличным от) наборам изменений в оригинальный репозиторий. Это означает, что каждый, используя этот репозиторий, придется удалить все клоны, которые у них есть, и получить новые.

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

Если ваш инструмент анализа имеет возможность переназначать имена авторов, это, вероятно, лучший способ. Но это не то, о чем вы просили, поэтому я дал вам ответ, который вы просили.: -)