gitignore nie ignoruje folderu

149

W katalogu głównym mojego projektu mam foofolder. Wewnątrz foofolderu mam barfolder. Chciałbym zignorować wszystkie zmiany we wszystkich plikach w moim barfolderze. Mam to w moim gitignore:

/foo/bar

Folder jest zaznaczony: istnieje i zawiera pliki do zignorowania. gitignorejest committed. Jednak mam plik, w którym wykonuję modyfikację i znajduje się w moim barfolderze. Kiedy piszę

git status

wewnątrz mojego git bashwidzę plik, który powinien zostać zignorowany. Jaki może być powód i jak z powodzeniem zignorować wszystkie pliki w folderze mojego paska?

Zauważ, że pliki były wcześniej ignorowane z tą samą linią, ale musiałem tymczasowo usunąć tę linię do commitczegoś na serwerze. Po zakończeniu commitumieściłem linię z powrotem w gitignore. To było jakiś czas temu, ale teraz zauważyłem, że pliki będą w formacie git status. Spodziewałbym się, że będę mógł modyfikować ignorowane pliki bez pojawiania się w git status.

Lajos Arpad
źródło
W przyszłości nie musisz modyfikować swoich ignorowań, aby dodać coś zignorowanego. git add -f ignored-filedoda plik, nawet jeśli jest w twoich ignorowaniach.
Chris,
Co git status foo/bar/file-that-should-be-ignoreddaje?
Chris,
Plik, który powinien zostać zignorowany w przypadku jakiejkolwiek zmiany. Oczywiście czegoś mi brakuje, ale według mojej wiedzy lista statusu gita powinna być pusta w tym przypadku, pod warunkiem, że / foo / bar jest obecny w .gitignore
Lajos Arpad
4
Wygląda na to, że ten plik jest faktycznie śledzony przez Git. W pewnym momencie musiało zostać dodane do repozytorium. Możesz zobaczyć jego historię za pomocą git log foo/bar/file-that-should-be-ignored. Jeśli nie powinien być częścią repozytorium, powinieneś go usunąć, git rm --cached foo/bar/file-that-should-be-ignoreda następnie zatwierdzić zgodnie z sugestią Reck poniżej (chociaż zrobiłbym to po prostu na pliku, a nie na całym folderze). Spowoduje to (a) usunięcie pliku z Gita, (b) zachowanie pliku w lokalnej kopii i (c) usunięcie pliku, gdy inni fetchlub pullnowe zatwierdzenie.
Chris

Odpowiedzi:

377

Zgaduję, że ten folder został już wcześniej sprawdzony w git?

Uruchom git rm -r --cached <folder>i sprawdź ponownie.

Dbać
źródło
3
Spowoduje to całkowite usunięcie folderu z (bieżącej wersji) repozytorium. OP chce, aby folder tam był, ale nowe zmiany nie powinny być śledzone
Gareth,
Niestety muszę usunąć akceptację. To rozwiązanie usunęło zdalne wersje plików po wypchnięciu. Chcę ustawić gitignore, aby ignorował wszystkie pliki folderu, a nie usuwał go ze zdalnego. Czy to jest możliwe? Odwróciłem rozwiązanie.
Lajos Arpad
13
git update-index --assume-unchanged <folder>być może?
Reck
3
@Lajos nie powinieneś po prostu naprawić jego błędu, zamiast dodawać tam ten mylący komentarz „edytuj”?
cregox
2
@Cawas, ponieważ ta strona dotyczy dzielenia się wiedzą, odpowiedź brzmi: nie. Przyjęcie odpowiedzi zawierającej błąd jest mylące. To -r nie jest opcjonalne.
Lajos Arpad
57

Dla mnie zaakceptowana odpowiedź była częścią rozwiązania, a nie całym rozwiązaniem. Być może inne kroki, które zamierzam opublikować, były oczywiste, ale najpierw je przegapiłem. Oto kroki, które podjąłem, aby upewnić się, że mój .gitignoreplik zignorował folder, który chciałem, aby zignorował:

  1. Zatwierdź wszelkie zmiany, które chcesz naprawić / zmienić.
  2. Uruchom to polecenie: git rm -r --cached .(które usuwa wszystko z indeksu git w celu odświeżenia repozytorium git)
  3. Następnie uruchom to polecenie: git add .(aby dodać wszystko z powrotem do repozytorium)
  4. Na koniec zatwierdź te zmiany za pomocą git commit -m ".gitignore Fixed"

Link do artykułu, z którego znalazłem rozwiązanie, znajdziesz tutaj .

sikanderBabwani
źródło
1
Nie jest to realne rozwiązanie oparte na pierwotnym pytaniu. @ lagos-arpad zapytał konkretnie o podkatalog, a nie o cały projekt. Twoje rozwiązanie usuwa wszystko z poziomu głównego repozytorium git i nie jest to zalecane podejście do rozwiązywania tego problemu.
justinhartman
Nawet jeśli to tylko podkatalog, to rozwiązanie zadziałało, ponieważ miałem do czynienia tylko z jednym plikiem. Czy możesz wyjaśnić, dlaczego nie jest to zalecane?
sikanderBabwani,
1
To, z czym miałeś do czynienia, jest nieistotne. To nie jest odpowiedź na pytanie i jest potencjalnie niebezpieczne, jak wskazała druga odpowiedź. Spowoduje to usunięcie rzeczy ze zdalnego repozytorium, których niekoniecznie chcesz.
RichieHH
to działało dokładnie tak, jak potrzebowałem do pracy. co dziwne, najnowsze zatwierdzenie pokazało poprzednie zatwierdzenia, a nie „.gitignore Fixed”! Ale znowu mój problem został rozwiązany
Nithin Sai
8

Miałem ten problem i zdałem sobie sprawę, że git właściwie ignorował pliki / foldery, ale mój edytor kodu (Visual Studio Code) był po prostu błędny i nie „wyszarzał” ich poprawnie na pasku bocznym interfejsu użytkownika. Zrestartowałem VSCode i zgodnie z oczekiwaniami były wyszarzone.

Mark Jackson
źródło
To samo tutaj: VS Code v1.30.2 (użytkownik)
xinthose
Dla mnie to samo. Bardzo dziękuję za to rozwiązanie! Zastanawiałem się, dlaczego mój .gitignore nie działa, dopóki nie spróbowałem ponownie uruchomić VS Code. Jestem na Visual Studio Code v1.44.2.
Fritz Lim
6

Jako dodatek do zaakceptowanej odpowiedzi

git rm -r --cached /foo/bar/
git status

Kiedy to robię, terminal wyświetla kilka rmplików w tym katalogu. Aby zapobiec kolejnemu zatwierdzeniu, które może niepotrzebnie wpłynąć na pilota, zrobiłem:

git reset HEAD *
git status

Po tym, to nic nie powiedział do popełniania i kiedy modyfikowanie plików wewnątrz /foo/bar/i zrobić git statusi jeszcze dostać nothing to commit.

learnsomemore
źródło
1
To po prostu wraca do miejsca, w którym zacząłem (problem)
Shonubi Korede