Gitignore все файлы расширения в каталоге

Есть ли способ игнорировать все файлы типа в каталоге?

**, по-видимому, не имеет смысла для git, поэтому это не работает:

/public/static/**/*.js

Идея состоит в том, чтобы сопоставить произвольные вложенные папки.

Ответ 1

Никогда не пробовал, но git help ignore предполагает, что если вы поместите .gitignore с *.js в /public/static, он сделает то, что вы хотите.

Примечание. Не забудьте также проверить ответ Joeys ниже: если вы хотите игнорировать файлы в определенном подкаталоге, локальное .gitignore - правильное решение (местность - это хорошо). Однако, если вам нужен тот же шаблон, который применим ко всему вашему репо, тогда решение ** лучше.

Ответ 2

Похоже, что синтаксис ** поддерживается git с версии 1.8.2.1 в соответствии с документацией.

Две последовательные звездочки ( "**" ) в шаблонах, сопоставленные с полным именем пути, могут иметь особое значение:

  • Ведущий "**", за которым следует совпадение косой черты во всех каталогах. Для Например, "**/foo" соответствует файлу или каталогу "foo" в любом месте, тот же как шаблон "foo" . "**/foo/bar" соответствует файлу или каталогу "bar" где-то прямо под каталогом "foo" .

  • Конечная "/**" соответствует всем внутри. Например, "abc/**" соответствует всем файлам внутри каталога "abc" по отношению к местоположению файл .gitignore с бесконечной глубиной.

  • Слэш, за которым следуют две последовательные звездочки, затем совпадение ноль или более каталогов. Например, "a/**/b" соответствует "a/b", "a/x/b", "a/x/y/b" и т.д.

  • Другие последовательные звездочки считаются недействительными.

Ответ 3

ОБНОВЛЕНИЕ. Посмотрите @Joey answer: Git теперь поддерживает синтаксис ** в шаблонах. Оба подхода должны работать нормально.


Страница gitignore (5) сообщает:

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

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

Созданный вами шаблон

/public/static/**/*.js

не совсем прав, во-первых, потому что (как вы правильно отметили) синтаксис ** не используется Git. Кроме того, ведущий / привязывает этот шаблон к началу пути. (Итак, /public/static/*.js будет соответствовать /public/static/foo.js, но не /public/static/foo/bar.js.) Удаление ведущего / тоже не будет работать, сопоставление путей, таких как public/static/foo.js и foo/public/static/bar.js. EDIT: просто удаление главной косой черты также не будет работать - поскольку шаблон все еще содержит косую черту, он обрабатывается Git как простой, нерекурсивный shell glob (спасибо @Joey Hoer для указания этого).

Как предположил @ptyx, вам нужно создать файл <repo>/public/static/.gitignore и включить только этот шаблон:

*.js

Нет ведущего /, поэтому он будет соответствовать в любой части пути, и этот шаблон будет применяться только к файлам в каталоге /public/static и его подкаталогах.

Ответ 4

Чтобы игнорировать не проверенные файлы, просто перейдите в .git/info/exclude. Exclude - это файл со списком игнорируемых расширений или файлов.