Відповіді:
Ніколи не пробував, але 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не відповідатиме, оскільки візерунок містить a /.
Щоб ігнорувати відслідковувані файли, просто перейдіть до .git / info / виключити. Виключити - це файл зі списком ігнорованих розширень або файлів.
Я вважаю, що найпростішим рішенням було б користуватися find. Мені не подобається мати кілька .gitignoreпідвісів у підкаталогах, і я вважаю за краще керувати унікальним, вищого рівня .gitignore. Для цього ви можете просто додати знайдені файли до свого .gitignore. Припустимо, що /public/static/це ваш проект / git home, я б використав щось на кшталт:
find . -type f -name *.js | cut -c 3- >> .gitignore
Я виявив, що вирізання ./на початку часто потрібно, щоб git зрозумів, яких файлів уникати. Тому cut -c 3-.