Відповіді:
Ніколи не пробував, але 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-
.