Может ли Mercurial использовать .hgignore, чтобы забыть файлы? - PullRequest
36 голосов
/ 23 июля 2010

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

Есть ли способ для hg забыть все файлы, совпадающие с .hgignore?

Ответы [ 5 ]

66 голосов
/ 23 июля 2011

наборы файлов удивительность (требуется 1.9):

hg forget "set:hgignore() and not ignored()"
2 голосов
/ 26 августа 2010

Я не думаю, что HG может сделать это из коробки.

Но довольно легко свернуть свое собственное. Записи hgignore - это regexp или glob, так что вы можете просто просмотреть записи и найти соответствующие файлы / каталоги и выполнить для них «hg remove».

Для разбора / сопоставления hgignore, если вы используете python, вы можете просто вызвать функции из ignore.py в hg.

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

2 голосов
/ 23 июля 2010

Вам нужно удалить этот файл, чтобы его можно было игнорировать.

hg remove -Af myfile

(удалить из ревизии, оставив копию в вашем рабочем пространстве: или hg forget)

Но ваш репозиторий Mercurial не «забудет» те же файлы в предыдущих ревизиях.

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

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

Удаление файла никоим образом не изменяет историю файла.


Другой способ, когда у вас много дополнительных файлов, которые вам нужны сейчасигнорировать это:

  • удалить их (из файловой системы, не командой hg, а командой ОС 'rm')
  • hg addremove (предупреждение, он добавит неподтвержденные файлы, но hg remove все остальные файлы, которые вы только что сохранили)

См. Как забыть все удаленные файлы с помощью Mercurial для более.

0 голосов
/ 04 декабря 2018

У Идана К отличное решение. Я добавил псевдоним в свой глобальный mercurial.ini, потому что не могу вспомнить команду.

[alias]
forgetignored = forget "set:hgignore() and not ignored()"
0 голосов
/ 23 июля 2011

Это то, что я сделал для каждого из каталогов, упомянутых в .hgignore

for /f "delims=" %i in ('dir bin /ad/s/b') do hg forget %i/

и для файлов

for /f "delims=" %i in ('dir *.user /s/b') do hg forget %i

ОТКАЗ:
Я не знаю, будет ли это работать на ОС, отличных от Windows, или нет.

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