Есть ли способ игнорировать все файлы типа в каталоге?
** 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-.