В чем разница между HG забудь и HG удалить? - PullRequest
311 голосов
/ 09 июля 2009

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

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

Ответы [ 5 ]

341 голосов
/ 09 июля 2009

'hg forget' - просто сокращение от 'hg remove -Af'. Из справки 'hg remove':

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

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

41 голосов
/ 29 марта 2012

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

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

26 голосов
/ 09 июля 2009

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

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

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

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

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

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

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

3 голосов
/ 21 декабря 2013

Если вы используете "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 различных типов состояния.

2 голосов
/ 04 мая 2015

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

...