Как я могу игнорировать все каталоги, кроме одного, использующего .hgignore? - PullRequest
15 голосов
/ 03 сентября 2010

Я управляю $ HOME, используя Mercurial, чтобы мои точечные файлы были в порядке и отслеживались, или, по крайней мере, те, которые важны для меня.

Однако в ~ есть множество файлов и каталогов, которые ненужно отслеживать, и этот набор постоянно меняется и постоянно растет.

Исторически я имел дело с этим, имея такой .hgignore:

syntax: glob
*

Это сохраняет мой статусочистить, насколько это возможно, делая видимыми только ранее отслеженные файлы.Однако у меня есть несколько каталогов (в моем случае scripts, .emacs.d), в которых я хотел бы видеть неотслеживаемые файлы;Я почти всегда хочу отслеживать новые добавления в эти каталоги.

Я знаю, что могу запустить hg st -u scripts, чтобы определить неотслеживаемые файлы, но я хочу средство, с помощью которого я могу выполнить ту же функциюиспользуя обычный ole hg status.

Есть ли способ сделать это?

Ответы [ 2 ]

18 голосов
/ 03 сентября 2010

Вместо этого попробуйте это в .hgignore:

syntax: regexp

^(?!(scripts|foo|bar)/)[^/]+/
  • ^ соответствует началу пути
  • (?!(scripts|foo|bar) использует отрицательное предпросмотр для игнорирования всех файлов, кроме тех, которые находятся в каталогахscripts, foo или bar
  • /) гарантирует, что каталоги с отслеживаемым каталогом в качестве префикса игнорируются
  • [^/]+/, а затем фактически соответствуют любому каталогу (исключая теисключает возможность предварительного просмотра), поэтому файлы в ~ не игнорируются

Кредит на основную идею в этом решении (отрицательный взгляд) переходит к ответу Майкла Ла Войе этот вопрос

10 голосов
/ 04 сентября 2010

Этот вопрос задавался здесь на SO довольно много раз, и вы получите много запутанных ответов, используя отрицательные заблаговременные утверждения нулевой ширины, часто злоупотребляемый трюк с регулярными выражениями, но лучшие решения - либо ) просто сделайте репо в этом каталоге или (б) просто добавьте файлы в этот каталог. Для варианта (b) вы просто поместите .* в свой файл .hgignore, чтобы игнорировать все, а затем вручную hg add файлы, которые вы хотите отслеживать. В mercurial, в отличие от svn и cvs, вы можете переопределить игнорирование надстройкой.

...