игнорирование папок в 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


person user2427    schedule 21.11.2008    source источник


Ответы (4)


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

^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-ignore есть.

person Ry4an Brase    schedule 24.11.2008
comment
@JaKXz да, это работает во всех версиях Mercurial. То, что у вас есть в вашем .hgignore, не прошло. Убедитесь, что ваш файл игнорирования интерпретируется как регулярное выражение, а не как глобус, и не рассчитывайте на игнорирование для игнорирования файлов, которые вы уже hg add редактировали. Игнорирование влияет только на то, как отображаются / обрабатываются не добавленные файлы. - person Ry4an Brase; 16.07.2013
comment
и другие. Решение, которое я нашел, - использовать это: syntax: regexp ^SourceFolder\bin ^SourceFolder\gen и для файла с именем .classpath: ^SourceFolder\.classpath - person JaKXz; 19.07.2013

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

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

or

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

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

[ui]
ignore = .hg/.hgignore

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

person Dziamid    schedule 07.06.2010
comment
.hgignore обычно находится в корневом каталоге репозитория, а не в .hg. - person Niall C.; 07.06.2010

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

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

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

person Nathan Kitchen    schedule 21.11.2008
comment
Намного сложнее, чем нужно решить простую задачу. Решение Ry4an выполняет то же самое гораздо более простым способом. - person Josh Ourisman; 04.03.2010

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

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

синтаксис: glob

bin / **

* .DS_Store

Это удалит каталог bin и все файлы * .DS_Store из репозитория.

person Mani    schedule 25.11.2015