Подтвердить что ты не робот

Как переименовать каталог в Mercurial и продолжить отслеживать все изменения файлов

Я решил переименовать некоторые каталоги в моем домашнем/хобби Python-пакете (doc до docs, test до tests, util до utils), потому что теперь я думал больше Об этом, я думаю, новые имена более уместны. Мое общее мышление теперь состоит в том, что если контейнеры названы в честь их содержимого, их имена должны быть множественными существительными.

Теперь, когда я готов к следующему hg commit, мне интересно, как сообщить Mercurial об этих изменениях каталога. Я новичок в программном обеспечении RCS в целом и уже несколько месяцев использую Mercurial. Когда я запускаю hg status, он показывает все файлы в этих каталогах, которые удаляются и добавляются, поэтому я боюсь, что если я просто сделаю hg addremove, я потеряю всю историю изменений для файлов в этих каталогах или на по крайней мере история изменений станет фрагментированной и непрослеживаемой. Я встретил команду hg rename, но документы обсуждают ее использование только для отдельных файлов, а не для каталогов.

После дальнейшего чтения в "Окончательном руководстве" Брайана О'Салливана, похоже, что rename может ссылаться на каталоги.

Итак, вот что я решил попробовать:

hg rename --after doc docs
hg rename --after test tests
hg rename --after util utils
hg status
hg addremove

Может ли кто-нибудь сказать мне, является ли это приемлемым и предпочтительным методом для переименования каталогов в Mercurial, а если нет, как мне это сделать.

4b9b3361

Ответ 1

Поскольку вы уже переименовали каталоги, это совершенно нормально. (Это спасло бы вас вручную, если вы позволите Mercurial переименовать их для вас: hg rename doc docs и т.д. Вместо того, чтобы делать это самостоятельно, а затем позволить Mercurial узнать об этом).

Если у вас нет других файлов для регистрации, hg addremove является излишним. Посмотрите на результат hg stat, и вы должны видеть только строки, начинающиеся с "R" (для doc/*, test/* и util/*) и "A" (для docs/* и т.д.)

Наконец, не забудьте зафиксировать изменения.

EDIT: Забыл сказать... используйте hg log --follow для отслеживания изменений в переименовании.

Ответ 2

Mercurial не имеет понятия каталогов; он обрабатывает все (файлы и каталоги) как файлы. Кроме того, я обычно никогда не переименовываю файлы или каталоги вручную; Я просто использую

hg переименовать имя старого имени

Я также предлагаю вам сделать это.

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

Однако, поскольку вы уже переименовали их вручную, вам нужно использовать аргумент --follow вместе с hg log, чтобы отслеживать изменения файла в истории.

Лично я бы просто пошел с hg rename, и это должен быть предпочтительный метод.

Ответ 3

Одна из причин использования - вместо вместо переименования с hg заключается в том, что вы используете инструмент рефакторинга, который делает больше, чем просто переименовать, например. также фиксирует ссылки.