2008-11-21 8 views
31

Предостережение: Я пробовал все возможности, перечисленные здесь: How can I ignore everything under a folder in Mercurial.
Не работает, как я надеюсь.игнорирование папок в mercurial

Я хочу игнорировать каждую вещь под папкой test. Но не игнорировать srcProject\test\TestManager

Стараюсь

syntax: glob 
test/** 

И он игнорирует test и srcProject\test\TestManager

С:

syntax: regexp 
^/test/ 

Это то же самое.

Также с:

syntax: regexp 
test\\* 

У меня есть установить TortoiseHG 0.4rc2 с Mercurial-626cb86a6523 + TortoiseHg, Python-2.5.1, PyGTK-2.10.6, GTK-2.10.11 в Windows,

ответ

44

Попробуйте без косой черты после вставки в версии регулярных выражений.

^test/ 

Вот тест:

~$ mkdir hg-folder-ignore 
~$ cd hg-folder-ignore 
~/hg-folder-ignore$ echo '^test/' > .hgignore 
~/hg-folder-ignore$ hg init 
~/hg-folder-ignore$ mkdir test 
~/hg-folder-ignore$ touch test/ignoreme 
~/hg-folder-ignore$ mkdir -p srcProject/test/TestManager 
~/hg-folder-ignore$ touch srcProject/test/TestManager/dont-ignore 
~/hg-folder-ignore$ hg stat 
? .hgignore 
? srcProject/test/TestManager/dont-ignore 

Обратите внимание, что ignoreme не отображается и DonT-игнорировать это.

+0

@JaKXz да, это работает во всех версиях Mercurial. То, что у вас в вашем `.ggignore`, не получилось. Убедитесь, что ваш файл игнорирования интерпретируется как регулярное выражение, а не glob, и не рассчитывайте на игнорирование, чтобы игнорировать файлы, которые вы уже «hg add`ed». Игнорирование влияет только на то, как неактивные файлы перечислены/обработаны. – 2013-07-16 13:51:33

4

вы можете использовать нулевую ширину отрицательный смотреть вперед и смотреть-за утверждений, чтобы указать, что вы хотите игнорировать test только тогда, когда оно не предшествует srcProject и не следует TestManager:

syntax: regexp 
(?<!srcProject\\)test\\(?!TestManager) 

Mercurial использует Python регулярных выражений, так что вы можете найти более подробную информацию о нулевой ширины утверждения в документации Python: https://docs.python.org/library/re.html#regular-expression-syntax

+1

прохладного техника, но полностью перебор в этом случае – 2010-01-27 15:25:06

+0

Путь более сложный, чем это необходимо для решения простой проблемы. Решение Ry4an делает то же самое гораздо проще. – 2010-03-04 02:52:19

3

Оба случая работал для меня (на Linux и Windows):

syntax: regexp 
^backup/  #root folder 
nbproject/ #any folder 

или

syntax: glob 
./backup/* #root folder 
nbproject/* #any folder 

Однако, это не было прежде, чем я добавил ссылку на файл .hgignore .hgrc файл в моем репо:

[ui] 
ignore = .hg/.hgignore 

Также стоит отметить, что Mercurial игнорирует файлы, это не в настоящее время отслеживает, которые добавлены до того, как вы настроили его, чтобы игнорировать их. Таким образом, не откладывайте статус hg, заявив, что некоторые из них являются M (изменены) или! (отсутствует) в папках, которые вы только что добавили в список игнорирования!

0

Создать .hgignore файл в корневом каталоге репозитория

Теперь добавьте следующее содержимое в файле.

Синтаксис: шарик

бен/**

* .DS_Store

Это удалит каталог бен и все * .DS_Store файлы из хранилища