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.Najlepszą odpowiedzią jest dodanie pliku Resources / .gitignore w sekcji Resources zawierającej:
Jeśli nie chcesz lub nie możesz dodać tego pliku .gitignore, istnieje nieeleganckie rozwiązanie:
Będziesz musiał edytować ten wzorzec, jeśli dodasz katalogi głębiej niż określono.
źródło
Może to wyglądać głupio, ale sprawdź, czy wcześniej nie dodałeś folderu / plików, które próbujesz zignorować do indeksu. Jeśli tak, nie ma znaczenia, co umieścisz w swoim pliku .gitignore, foldery / pliki nadal będą przemieszczane.
źródło
git rm --cached <path to files>
aby usunąć te ignorowane pliki z gita, pozostawiając je w systemie plików.Albo robię to źle, albo zaakceptowana odpowiedź nie działa już z obecnym gitem.
I rzeczywiście znaleźć odpowiednie rozwiązanie i zamieścił je na prawie to samo pytanie tutaj . Więcej szczegółów znajdziesz tam.
Rozwiązanie:
źródło
!/Resources/**/
było kluczowe, aby git nie ignorował podkatalogów.