В чем разница между HG забудь и HG удалить?

313

Я хочу, чтобы Mercurial удалил несколько файлов из текущего состояния хранилища. Однако я хочу, чтобы файлы существовали в предыдущей истории.

Как forgetи removeотличаются, и они могут делать то , что я хочу?

Пол Натан
источник
27
Не волнуйтесь, вы не можете удалить файл из предыдущей истории в Mercurial - история обычно неизменна, если вы не начнете использовать расширения.
Мартин Гейслер

Ответы:

348

« hg forgetэто просто сокращение для hg remove -Af». Из hg removeсправки ' ':

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

Итог: ' remove' удаляет файл из вашей рабочей копии на диске (если вы не используете -Af), а ' forget' нет.

Ry4an Brase
источник
7
«hg забудьте» повторно введен в Mercurial 1.3 как более простой способ сделать «hg remove -Af». Он планирует файл для удаления, не удаляя его из рабочей копии.
Мартин Гейслер
5
Рад это слышать. «Удалить -Af» (и вся таблица параметров на странице справки «удалить») - это безумие.
Ry4an Brase
32
@ Ry4an: Серьезно, это было смешно. Я внес патч, который снова ввел «забыть». Когда я делал это, я понял, что -Af имел полный смысл в коде, но с точки зрения пользователя это было совершенно нелепо.
Стив Лош
10
Хех, это то, что так здорово в Mercurial - люди активно и итеративно думают о том, что имеет смысл с точки зрения пользователя. Спасибо за исправление этого.
Ry4an Brase
9
Локальные файлы конфигурации сборки или тому подобное? Пути к локальным инструментам, которые отличаются от системы к системе? Случайно добавлен файл журнала, который вы не хотите в системе контроля версий, но хотите сохранить? Я думаю, это случилось.
Ry4an Brase
42

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

Другими словами, я не могу сказать , использовали ли вы hg forgetили hg removeкогда вытащил от вас. Файл , который вы запускали hg forgetна будет удален при обновлении с этой ревизией - так же , как если бы вы использовали hg removeвместо этого.

Мартин Гайслер
источник
27

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

Из книги Mercurial по адресу http://hgbook.red-bean.com/read/ :

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

Страница man hg (1) говорит об этом:

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

А это по поводу удаления:

Запланируйте удаление указанных файлов из хранилища. Это удаляет только файлы из текущей ветви, а не из всей истории проекта.

Джейсон Катена
источник
3

Если вы используете "hg remove b"файл со статусом «A», что означает, что он был добавлен, но не зафиксирован, Mercurial ответит:

  not removing b: file has been marked for add (use forget to undo)

Этот ответ является очень четким объяснением разницы между удалением и забыванием.

Насколько я понимаю, "hg forget"это для удаления добавленного, но не зафиксированного файла, чтобы он не отслеживался контролем версий; в то время "hg remove"как для извлечения зафиксированного файла из контроля версий.

В этой теме есть пример для использования hg removeпротив файлов 7 различных типов статуса.

gm2008
источник
2

Файл может быть отслежен или нет, вы используете hg add для отслеживания файла, а hg remove или hg забудьте, чтобы отследить его. Использование hg remove без флагов приведет к удалению файла и его отслеживанию, hg adm просто отключит отслеживание, не удаляя его.

Tao
источник
3
Я не знаю, почему вы почувствовали необходимость добавить эту цитату, когда сам человек уже вмешался, но, эй, все, что плавает на вашей лодке.
Натан Тагги