Ответ 1
filesets awesomeness (требуется 1.9):
hg forget "set:hgignore() and not ignored()"
Я забыл поместить правильный правильный .hgignore в свой проект, и теперь я столкнулся с множеством бесполезных файлов в моем репозитории. Поскольку эти файлы уже находятся под контролем источника .hgignore не будет забирать em.
Есть ли способ hg забыть все файлы, сопоставленные с .hgignore?
filesets awesomeness (требуется 1.9):
hg forget "set:hgignore() and not ignored()"
Вам нужно удалить этот файл, чтобы его можно было игнорировать.
hg remove -Af myfile
(удалите из ревизии, оставив копию в рабочей области: или hg forget
)
Но ваш репозиторий Mercurial не будет "забывать" те же файлы в предыдущих версиях.
Удаление файла не влияет на его историю.
Важно понимать, что удаление файла имеет только два эффекта.
- Он удаляет текущую версию файла из рабочего каталога.
- Он останавливает Mercurial от отслеживания изменений в файле со времени следующей фиксации.
Удаление файла никоим образом не изменяет историю файла.
Другой способ, когда у вас есть много дополнительных файлов, которые вам нужно теперь игнорировать, есть:
hg addremove
(предупреждение, оно добавит в настоящее время неподдерживаемые файлы, но будет hg remove
все остальные файлы, которые вы только что указали)См. Как забыть все удаленные файлы с помощью Mercurial для более подробной информации.
Я не думаю, что hg может сделать это из коробки.
Но это довольно легко сворачивать. Записи hgignore представляют собой регулярное выражение или glob, поэтому вы можете просто просмотреть записи и найти соответствующие файлы /dirs и сделать "hg remove" на них.
Для анализа/сопоставления hgignore, если вы используете python, вы можете просто вызвать функции в hg ignore.py.
Возможно, кто-то может написать расширение для этого.
Это то, что я сделал для каждой из каталогов, упомянутых в .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-ОС или нет.
Решение Idan K отлично. Я добавил псевдоним моего глобального mercurial.ini, потому что не могу запомнить эту команду.
[alias]
forgetignored = forget "set:hgignore() and not ignored()"