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