Суммируйте все проигнорированные файлы / каталоги в ртутном хранилище

hg st -i показывает все игнорируемые файлы. Это может быть огромный список, если я игнорирую некоторые внешние библиотеки. Можно ли увидеть только каталоги, в которых файлы были проигнорированы? Или какой-то другой способ аккуратно подвести итог, какие файлы / каталоги были проигнорированы?

2 ответа

Решение

Если вы работаете в Unix (Linux/OS X), вы можете легко сгенерировать список каталогов, содержащих игнорируемые файлы, с одной строкой ниже.

% hg status -i
I .project
I project/doc/API-notes.bbl
I project/doc/API-notes.blg
I project/doc/API-notes.log

% hg status -ni | sed -e 's/^/.\//' -e 's/\/[^\/]*$/\//' | sort | uniq -c
   1 ./
   3 ./project/doc/

Первый sed выражение добавляет ./ перед каждым игнорируемым путем. Второе выражение удаляет все после последней косой черты. Я специально восстанавливаю слэш; оставьте это, если хотите. В заключение, sort | uniq -c считает и удаляет повторы.

PS. Вы можете превратить вышесказанное в псевдоним hg, чтобы, например, запустить его с hg ignoredirs; просто поместите следующее в свой .hgrc:

[alias]
ignoredirs = !$HG status -ni | sed -e 's/^/.\//' -e 's/\/[^\/]*$/\//' | sort | uniq -c

Следующее выполнение в корневом каталоге вашего репозитория:

cat ./.hgignore 

или на окнах:

type .\.hginore

Будут отображаться ваши репозитории, игнорирующие правила.

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

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

Другие вопросы по тегам