Czy istnieje sposób na zignorowanie wszystkich plików danego typu w katalogu?
**
najwyraźniej nie ma sensu git, więc to nie działa:
/public/static/**/*.js
Chodzi o dopasowanie dowolnych zagnieżdżonych folderów.
Czy istnieje sposób na zignorowanie wszystkich plików danego typu w katalogu?
**
najwyraźniej nie ma sensu git, więc to nie działa:
/public/static/**/*.js
Chodzi o dopasowanie dowolnych zagnieżdżonych folderów.
Odpowiedzi:
Nigdy nie próbowałem, ale git help ignore
sugeruje, że jeśli szuka .gitignore
się *.js
w /public/static
, będzie to robić co chcesz.
Uwaga: koniecznie sprawdź również odpowiedź Joeysa poniżej: jeśli chcesz zignorować pliki w określonym podkatalogu, właściwym rozwiązaniem jest lokalny plik .gitignore (lokalizacja jest dobra). Jeśli jednak potrzebujesz tego samego wzoru, aby zastosować się do całego repo, to ** rozwiązanie jest lepsze.
Wygląda na to, że **
składnia jest obsługiwana git
od wersji 1.8.2.1
zgodnie z dokumentacją .
Dwie kolejne gwiazdki („
**
”) we wzorach dopasowanych do pełnej nazwy ścieżki mogą mieć specjalne znaczenie:
Początkowe „
**
”, a następnie ukośnik oznacza dopasowanie we wszystkich katalogach. Na przykład „**/foo
” pasuje do pliku lub katalogu „foo
” w dowolnym miejscu, tak samo jak wzorzec „foo
”. „**/foo/bar
” pasuje do pliku lub katalogu „bar
” w dowolnym miejscu bezpośrednio w katalogu „foo
”.Końcowy „
/**
” pasuje do wszystkiego w środku. Na przykład „abc/**
” dopasowuje wszystkie pliki w katalogu „abc
” względem położenia.gitignore
pliku z nieskończoną głębią.Ukośnik, po którym następują dwie kolejne gwiazdki, następnie ukośnik odpowiada zero lub większej liczbie katalogów. Na przykład „
a/**/b
” pasuje ”a/b
,„a/x/b
”,„a/x/y/b
”i tak dalej.Inne kolejne gwiazdki są uważane za nieprawidłowe.
xxx/**
i xxx/
?
xxx/**
celuje we wszystkie pliki i katalogi wewnątrz, xxx
natomiast bezpośrednio xxx/
na xxx
katalog. To naprawdę ma znaczenie tylko przy negowaniu wzorców !
jako „Nie można ponownie dołączyć pliku, jeśli katalog nadrzędny tego pliku jest wykluczony.”, Więc używając xxx/*
lubxxx/**
byłoby konieczne w takim przypadku.
**.js
?
AKTUALIZACJA: Spójrz na odpowiedź @ Joeya : Git obsługuje teraz **
składnię we wzorach. Oba podejścia powinny działać dobrze.
Strona podręcznika gitignore (5) stwierdza:
Wzorce odczytywane z pliku .gitignore w tym samym katalogu co ścieżka lub w dowolnym katalogu nadrzędnym, przy czym wzorce w plikach wyższego poziomu (do najwyższego poziomu drzewa roboczego) są zastępowane przez wzorce w plikach niższego poziomu do katalogu zawierający plik.
Oznacza to, że wzorce w .gitignore
pliku w dowolnym katalogu repozytorium wpłyną na ten katalog i wszystkie podkatalogi .
Podany wzór
/public/static/**/*.js
nie jest całkiem poprawne, po pierwsze dlatego, że (jak słusznie zauważyłeś) **
Git nie używa składni. Ponadto wiodące /
kotwice wzorujące się na początku nazwy ścieżki. (Więc /public/static/*.js
będzie pasować, /public/static/foo.js
ale nie /public/static/foo/bar.js
.) Usunięcie wiodącego też EDYCJA: Samo usunięcie wiodącego ukośnika też nie zadziała - ponieważ wzorzec nadal zawiera ukośnik, Git traktuje go jako zwykły, nierekurencyjny glob powłoki (dzięki @Joey Hoer za wskazanie tego)./
nie zadziała, dopasowanie ścieżek takich jak public/static/foo.js
i foo/public/static/bar.js
.
Jak sugerował @ptyx, musisz utworzyć plik <repo>/public/static/.gitignore
i dołączyć tylko ten wzorzec:
*.js
Nie ma żadnych wiodących elementów /
, więc będzie pasować do dowolnej części ścieżki, a ten wzorzec zostanie zastosowany tylko do plików w /public/static
katalogu i jego podkatalogach.
/
nie będzie działać, dopasowując ścieżki jak public/static/foo.js
i foo/public/static/bar.js
”. to fałsz. Cytując dokumentację: „Jeśli wzorzec nie zawiera ukośnika /, Git traktuje go jako wzorzec glob powłoki i sprawdza zgodność z nazwą ścieżki względem położenia pliku .gitignore (względem najwyższego poziomu drzewa roboczego, jeśli nie z pliku .gitignore). ” foo/public/static/bar.js
nie byłoby dopasowane, ponieważ wzorzec zawiera /
.
Aby zignorować nieśledzone pliki, przejdź do .git / info / exclude. Wyklucz to plik z listą ignorowanych rozszerzeń lub plików.
Uważam, że najprostszym rozwiązaniem byłoby użycie find
. Nie lubię, gdy wielu .gitignore
kręci się w podkatalogach i wolę zarządzać unikalnym, najwyższym poziomem .gitignore
. Aby to zrobić, możesz po prostu dołączyć znalezione pliki do swojego .gitignore
. Załóżmy, że /public/static/
to jest twój projekt / git home, użyłbym czegoś takiego:
find . -type f -name *.js | cut -c 3- >> .gitignore
Odkryłem, że wycięcie ./
na początku jest często konieczne, aby git zrozumiał, których plików należy unikać. Dlatego też cut -c 3-
.