Как переименовать каталог в Mercurial и продолжить отслеживать все изменения файлов - PullRequest
34 голосов
/ 21 августа 2010

Я решил переименовать некоторые каталоги в своем домашнем / хобби-пакете 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, и еслинет, как мне это сделать.

Ответы [ 3 ]

39 голосов
/ 21 августа 2010

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

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

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

РЕДАКТИРОВАТЬ: Забыл сказать ... используйте hg log --follow для отслеживания изменений в переименовании.

16 голосов
/ 21 августа 2010

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

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

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

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

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

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

10 голосов
/ 07 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...