Подтвердить что ты не робот

Может ли Mercurial использовать .hgignore, чтобы забыть файлы?

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

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

4b9b3361

Ответ 1

filesets awesomeness (требуется 1.9):

hg forget "set:hgignore() and not ignored()"

Ответ 2

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

hg remove -Af myfile

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

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

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

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

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


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

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

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

Ответ 3

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

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

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

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

Ответ 4

Это то, что я сделал для каждой из каталогов, упомянутых в .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-ОС или нет.

Ответ 5

Решение Idan K отлично. Я добавил псевдоним моего глобального mercurial.ini, потому что не могу запомнить эту команду.

[alias]
forgetignored = forget "set:hgignore() and not ignored()"