Stworzyłem białą listę tylko dla plików tekstowych.
*
!*.txt
Teraz mam nieśledzony plik tekstowy w podkatalogu - sub/dir/file.txt
i NIE jest to pokazane (jest ignorowane). Wyświetlane są jednak pliki tekstowe w katalogu głównym.
Dlaczego tak jest i jak to naprawić?
.gitignore
.Odpowiedzi:
Jeśli spróbujesz w ten sposób, nie powiedzie się, ponieważ w końcu trafisz na czarną listę katalogów w swojej strukturze.
Aby rozwiązać problem, chcesz umieścić na czarnej liście wszystko, co nie jest katalogiem i nie jest jednym z typów plików, które chcesz zatwierdzić, bez umieszczania na czarnej liście katalogów .
.gitignore
Plik, który będzie to zrobić:Przetestowane w strukturze trzypoziomowej biało wystawianie dla
.txt
plików w obecności*.one
,*.two
a*.three
pliki przy użyciu.gitignore
znajdujących się w katalogu głównym repozytorium - pracuje dla mnie. Nie będziesz musiał dodawać.gitignore
plików do wszystkich katalogów w swojej strukturze.Informacje, których użyłem do znalezienia odpowiedzi, pochodziły między innymi z tego (stackoverflow.com).
źródło
!.gitignore
, kiedy używasz*
, prawda?/*
do czarnej listy tylko folderu najwyższego poziomu, ale nie wszystkich folderów rekurencyjnie, co w rzeczywistości oznacza,.gitignore
że nie należy zaglądać do podfolderów umieszczonych na białej liście.Prostszym sposobem osiągnięcia tego jest:
To działa, ponieważ
gitignore
stosuje wzorce, które nie zaczynają się od,/
na każdym poziomie poniżej.gitignore
pliku:Jeśli chcesz to zrobić z plikami w katalogu , sprawy stają się bardziej złożone:
To działa, ponieważ
gitignore
ma specjalne zasady dotyczące**
:Kluczową kwestią jest upewnienie się, że nie ignorujesz katalogów, ponieważ wtedy każdy plik w tym katalogu jest ignorowany niezależnie od innych reguł.
źródło
Długo szukałem:
Załóżmy, że mam dużą strukturę folderów z ~ 100 000 katalogami zagnieżdżonymi rekurencyjnie. W tych folderach jest około 30 000 plików typu
.txt
(w moim przypadku: type*.md
). Obok tych*.md
plików jest, powiedzmy, 500 GB (ponad milion) plików, których nie chcę śledzić.Chcę, aby git śledził tylko
.txt
(lub*.md
) pliki we wszystkich folderach i podkatalogach.Prawidłowa odpowiedź powinna brzmieć: w Git nie jest to możliwe.
Co zamiast tego zrobiłem:
[edit: też nie działa - próbowałem stworzyć folder z dowiązaniami symbolicznymi (lub dowiązaniami twardymi) i użyć tam git, ale git nie podąża za dowiązaniami symbolicznymi i nadpisuje dowiązania stałe. No!]
źródło