Есть ли способ игнорировать все файлы типа в каталоге?
**, по-видимому, не имеет смысла для git, поэтому это не работает:
/public/static/**/*.js
Идея состоит в том, чтобы сопоставить произвольные вложенные папки.
Есть ли способ игнорировать все файлы типа в каталоге?
**, по-видимому, не имеет смысла для git, поэтому это не работает:
/public/static/**/*.js
Идея состоит в том, чтобы сопоставить произвольные вложенные папки.
Никогда не пробовал, но git help ignore предполагает, что если вы поместите .gitignore с *.js в /public/static, он сделает то, что вы хотите.
Примечание. Не забудьте также проверить ответ Joeys ниже: если вы хотите игнорировать файлы в определенном подкаталоге, локальное .gitignore - правильное решение (местность - это хорошо). Однако, если вам нужен тот же шаблон, который применим ко всему вашему репо, тогда решение ** лучше.
Похоже, что синтаксис ** поддерживается 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" и т.д.Другие последовательные звездочки считаются недействительными.
ОБНОВЛЕНИЕ. Посмотрите @Joey answer: Git теперь поддерживает синтаксис ** в шаблонах. Оба подхода должны работать нормально.
Страница gitignore (5) сообщает:
Шаблоны, считанные из файла .gitignore в том же каталоге, что и путь или в любом родительском каталоге, с шаблонами в файлах более высокого уровня (вплоть до верхнего уровня дерева работ), которые переопределяются теми, которые находятся в файлах нижнего уровня вплоть до каталога, содержащего файл.
Это означает, что шаблоны в файле .gitignore в любой заданной директории вашего репо будут влиять на этот каталог и на все подкаталоги.
Созданный вами шаблон
/public/static/**/*.js
не совсем прав, во-первых, потому что (как вы правильно отметили) синтаксис ** не используется Git. Кроме того, ведущий / привязывает этот шаблон к началу пути. (Итак, /public/static/*.js будет соответствовать /public/static/foo.js, но не /public/static/foo/bar.js.) Удаление ведущего EDIT: просто удаление главной косой черты также не будет работать - поскольку шаблон все еще содержит косую черту, он обрабатывается Git как простой, нерекурсивный shell glob (спасибо @Joey Hoer для указания этого)./ тоже не будет работать, сопоставление путей, таких как public/static/foo.js и foo/public/static/bar.js.
Как предположил @ptyx, вам нужно создать файл <repo>/public/static/.gitignore и включить только этот шаблон:
*.js
Нет ведущего /, поэтому он будет соответствовать в любой части пути, и этот шаблон будет применяться только к файлам в каталоге /public/static и его подкаталогах.
Чтобы игнорировать не проверенные файлы, просто перейдите в .git/info/exclude. Exclude - это файл со списком игнорируемых расширений или файлов.