Есть ли способ игнорировать все файлы типа в каталоге?
**
, по-видимому, не имеет смысла для 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 - это файл со списком игнорируемых расширений или файлов.