Как сделать так, чтобы Mercurial игнорировал любой файл с расширением .xxx? - PullRequest
20 голосов
/ 20 мая 2011

Я хочу, чтобы Mercurial игнорировал любой файл с определенным расширением.

Например, я хотел игнорировать файлы с расширением .SUO.(Нет необходимости в управлении версиями пользовательских настроек Visual Studio.)

Поэтому я изменил свой файл .hgignore следующим образом:

syntax: glob
*.suo

Однако это не имеет никакого эффекта, и Mercurial все еще видитмой файл .suo.

Что я здесь не так делаю?

Ответы [ 4 ]

26 голосов
/ 20 мая 2011

Если при запуске hg status перед изменением файла .hgignore перед файлом .suo был ?, то его следует игнорировать. Если что-то еще (например, M или A), оно уже отслежено хранилищем и не прекратит магически отслеживаться. В таком случае вам нужно будет сделать hg remove для файла, чтобы удалить его и сделать так, чтобы hg прекратил его отслеживать, или просто сделать hg forget для него, чтобы hg прекратил его отслеживать, но сохранил файл. За каждым должен следовать коммит.

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

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

syntax: glob
*\obj\*
*\bin\*
*.csproj.user
*.suo

Опять же, когда вы запускаете hg status и он показывает файл .suo, какой отдельный символ находится в начале этой строки? Это символ M, A, R, ! или ?? Какой путь после него?

6 голосов
/ 20 мая 2011

Mercurial использует записи в файле с именем .hgignore, чтобы определить, какие файлы он полностью игнорирует. Обычно он находится в корневом файле вашего репозитория (а , а не в каталоге .hg, как вы думаете).

Вы можете узнать больше здесь:

http://www.selenic.com/mercurial/hgignore.5.html

Обычно мы используем синтаксис регулярного выражения, чтобы гарантировать, что регистр не является фактором в расширениях:

# use regexp syntax.
syntax: regexp
(?i)\.dcu
(?i)\.identcache
(?i)\.dof
(?i)\.dsk
(?i)\.bak
(?i)\.old

Таким образом, он гарантирует, что даже если по какой-то причине случай расширения изменится, он все равно будет игнорироваться.

5 голосов
/ 03 апреля 2012

Пример игнорирования / исключения файлов с расширением .o:

.*\.o$

следует перевести на .*\.suo$ для расширений .suo.
Я успешно использовал этот метод

2 голосов
/ 20 мая 2011

Проверьте, где находится файл .hgignore, и убедитесь, что он находится либо в $ HOME, либо в корневой папке проекта.Проверьте СЛУЧАЙ (против случая) расширения.Я сомневаюсь, что сопоставление с образцом нечувствительно к регистру.

edit: протестировано, сопоставление с образцом НЕ чувствительно к регистру.Следовательно, добавьте «* .SUO», если вы хотите игнорировать файлы с расширением «.SUO».

...