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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Из книги Mercurial на http://hgbook.red-bean.com/read/:

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

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

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

И это об удалении:

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

Ответ 4

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

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

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

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

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

Ответ 5

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