Есть ли способ игнорировать все файлы типа в каталоге?
**
Git, по-видимому, бессмысленно, так что это не работает:
/public/static/**/*.js
Идея состоит в том, чтобы соответствовать произвольным вложенным папкам.
Есть ли способ игнорировать все файлы типа в каталоге?
**
Git, по-видимому, бессмысленно, так что это не работает:
/public/static/**/*.js
Идея состоит в том, чтобы соответствовать произвольным вложенным папкам.
Ответы:
Никогда не пробовал, но git help ignore
предполагает , что если вы поставите .gitignore
с *.js
в /public/static
, он будет делать то , что вы хотите.
Примечание: обязательно ознакомьтесь с ответом Джои ниже: если вы хотите игнорировать файлы в определенном подкаталоге, то локальное .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
"и так далее.Другие последовательные звездочки считаются недействительными.
xxx/**
а xxx/
?
xxx/**
предназначается для всех файлов и каталогов внутри, xxx
тогда как xxx/
предназначается для xxx
каталога непосредственно. Это действительно имеет значение только при отрицании шаблонов с помощью !
«Невозможно повторно включить файл, если исключен родительский каталог этого файла». Поэтому в этом случае необходимо использовать xxx/*
или xxx/**
будет необходимо.
**.js
?
ОБНОВЛЕНИЕ: взгляните на ответ @ Joey : Git теперь поддерживает **
синтаксис в шаблонах. Оба подхода должны работать нормально.
Страница руководства gitignore (5) гласит:
Шаблоны, считанные из файла .gitignore в том же каталоге, что и путь, или в любом родительском каталоге, причем шаблоны в файлах более высокого уровня (вплоть до верхнего уровня рабочего дерева) переопределяются шаблонами из файлов более низкого уровня вплоть до каталога содержащий файл.
Это означает, что шаблоны в .gitignore
файле в любом заданном каталоге вашего репо будут влиять на этот каталог и все его подкаталоги .
Образец вы предоставили
/public/static/**/*.js
не совсем правильно, во-первых, потому что (как вы правильно заметили) **
синтаксис не используется Git. Кроме того, ведущие /
привязывают этот шаблон к началу пути. (Таким образом, /public/static/*.js
будет совпадать, /public/static/foo.js
но нет /public/static/foo/bar.js
.) Удаление лидирующих РЕДАКТИРОВАТЬ: Простое удаление начального слеша также не сработает - поскольку шаблон по-прежнему содержит слеш, он обрабатывается Git как простой нерекурсивный глобус оболочки (спасибо @Joey Hoer за указание на это)./
также не будет работать, сопоставляя пути, такие как public/static/foo.js
и foo/public/static/bar.js
.
Как и предположил @ptyx, вам нужно создать файл <repo>/public/static/.gitignore
и включить только этот шаблон:
*.js
Ведущий отсутствует /
, поэтому он будет совпадать с любой частью пути, и этот шаблон будет применяться только к файлам в /public/static
каталоге и его подкаталогах.
/
также не будет работать, сопоставляя пути, такие как public/static/foo.js
и foo/public/static/bar.js
». ложно Цитируем документацию: «Если шаблон не содержит косую черту /, Git обрабатывает его как шаблон оболочки и проверяет совпадение с именем пути относительно местоположения файла .gitignore (относительно верхнего уровня рабочего дерева, если не из файла .gitignore). " foo/public/static/bar.js
не будет соответствовать, потому что шаблон содержит /
.
Чтобы игнорировать неотслеживаемые файлы, просто перейдите в .git / info / exclude. Исключить - это файл со списком игнорируемых расширений или файлов.
Я считаю, что самым простым решением было бы использовать find
. Мне не нравится, когда .gitignore
в подкаталогах много раз, и я предпочитаю управлять уникальным верхним уровнем .gitignore
. Для этого вы можете просто добавить найденные файлы в свой .gitignore
. Предположив , что /public/static/
ваш проект / мерзавец домой , я хотел бы использовать что - то вроде:
find . -type f -name *.js | cut -c 3- >> .gitignore
Я обнаружил, что вырезание ./
в начале часто необходимо, чтобы git понимал, каких файлов следует избегать. Поэтому cut -c 3-
.