Widziałem podobne pytania ( 1 , 2 i 3 ), ale nie otrzymałem od nich właściwego rozwiązania.
Muszę zignorować wszystkie pliki w określonym folderze z wyjątkiem określonego typu pliku. Folder jest podkatalogiem dla ścieżki głównej. Nazwijmy folder Resources
. Ponieważ nie chcę komplikować sprawy, pozwól mi zignorować pliki we wszystkich folderach o nazwach, Resources
gdziekolwiek się one znajdują.
To jest najczęstsze rozwiązanie (we wszystkich zduplikowanych pytaniach)
# Ignore everything
*
# Don't ignore directories, so we can recurse into them
!*/
# Don't ignore .gitignore
!.gitignore
# Now exclude our type
!*.foo
Problem z tym rozwiązaniem polega na tym, że przestaje śledzić nowo dodane pliki (ponieważ *
ignoruje wszystkie pliki). Nie chcę ciągle wykluczać każdego typu pliku. Chcę normalnego zachowania, w którym jeśli dodany zostanie nowy plik, git status
pokaże go.
W końcu znalazłem tutaj rozwiązanie . Rozwiązaniem jest dodanie kolejnego .gitignore
pliku w Resources
folderze. Działa to poprawnie.
Czy mogę osiągnąć to samo z jednym ignorowanym plikiem? Uważam, że posiadanie wielu ignorowanych plików w różnych katalogach jest nieco niezgrabne.
Oto, co staram się osiągnąć:
# Ignore everything under Resources folder, not elsewhere
Resources
# Don't ignore directories, so we can recurse into them
!*Resources/
# Now exclude our type
!*.foo
Ale to daje odwrotny wynik. Ignoruje *.foo
typy i śledzi inne pliki.
DirectoryName1/** DirectoryName1/**/*
dla każdego z nich. Najpierw usuwasz katalogi, ale potrzebujesz drugiej, aby usunąć wszystkie typy plików.