Miałem ten sam problem, a potem odkryłem, że zamiast tego zapisałem plik .gitignore na innym dysku: face-palm:
Henry Chan
Przechowywanie rzeczy w repozytorium i ignorowanie zmian w nim jest bardzo złym pomysłem.
Jewgienij Afanasiew
Odpowiedzi:
370
Upewnij się, że .gitignoreznajdujesz się w katalogu głównym katalogu roboczego, w tym katalogu uruchom git statusi skopiuj ścieżkę do pliku z wyjścia statusu i wklej go do pliku .gitignore.
Jeśli to nie zadziała, prawdopodobnie plik jest już śledzony przez Git. Możesz to potwierdzić za pomocą danych wyjściowych git status. Jeśli pliku nie ma na liście w sekcji „Nieśledzone pliki” , oznacza to, że jest już śledzony przez Git i zignoruje regułę z .gitignorepliku.
Powodem ignorowania plików w Git jest to, że nie zostaną one dodane do repozytorium. Jeśli wcześniej dodałeś plik, który chcesz zignorować, będzie on śledzony przez Git, a reguły ignorowania pasujące do niego zostaną pominięte. Git robi to, ponieważ plik jest już częścią repozytorium.
Aby faktycznie zignorować plik, musisz go wyśledzić i usunąć z repozytorium. Możesz to zrobić za pomocą git rm --cached sites/default/settings.php. Spowoduje to usunięcie pliku z repozytorium bez fizycznego usuwania pliku (tak właśnie --cacheddziała). Po zatwierdzeniu tej zmiany plik zostanie usunięty z repozytorium, a zignorowanie go powinno działać poprawnie.
Co rozumiesz przez „katalog główny katalogu roboczego”? Katalog, w którym znajduje się repozytorium „.git”?
Jonathan Leffler
Katalog roboczy to katalog, w którym ten .gitkatalog się znajduje i który sam jest katalogiem głównym repozytorium. Podobnie jak w przypadku klonowania repozytorium, /xy/wówczas /xy/katalog roboczy zawiera /xy/.git/wewnątrz.
poke
3
Czasami trzeba również zrobić git add .po, git rm --cachedaby poprawnie odbudować indeks.
Cooper
Pomysł sprawdzenia tego w git był genialny. Ciągle sprawdzałem to w Git Staging w Eclipse i ścieżka była niepoprawna. Dzięki!
walla
1
Musiałem dodać flagę -r (rekurencyjną), ponieważ włączyłem również zagnieżdżone foldery. W moim przypadku przeniosłem się do katalogu głównego folderu git, a następnie uruchomiłem polecenie git rm --cached -r .vs / Where vs był folderem najwyższego poziomu, który chciałem usunąć ze śledzenia.
Devology Ltd,
106
Wpadłem na to, to stare pytanie, ale chcę, aby ten plik był śledzony, ale aby nie śledzić go na niektórych kopiach roboczych, aby to zrobić, możesz uruchomić
Właśnie takiej odpowiedzi szukałem. Wszystkie pozostałe odpowiedzi zakładają, że plik został dodany za pomocą git add, co nie zawsze ma miejsce. W przypadku Acquia Cloud plik .gitignore powinien ignorować settings.php (na przykład), ale plik jest dołączany do pierwszego zatwierdzenia. Wyśledzenie pliku po prostu usuwa go z repozytorium, a zatem usuwa go z witryny na żywo ...
PatrickS
Pomógł mi też - dziękuję! Zagłosowano. Podejrzewam, że dotyczy to tylko lokalnego repozytorium git i nie utrzyma się, gdy zostanie zepchnięty na odległość i sklonowany przez innych deweloperów?
Ivan
1
Tak, to tylko lokalny.
Mescalito,
41
.gitignore zignoruje tylko pliki, które nie zostały jeszcze dodane do repozytorium.
Jeśli zrobiłeś git add ., a plik został dodany do indeksu, .gitignore ci nie pomoże. Musisz to zrobić, git rm sites/default/settings.phpaby go usunąć, a następnie zostanie zignorowany.
dzięki. ale jak mogę usunąć plik tylko z indeksu, a nie z katalogu roboczego?
Nick.h
1
git rmpowinien to zrobić, ale może to wymagać podania opcji -f, która usunęłaby go z katalogu roboczego. Nie wymyśliłem tego inaczej niż zrobić kopię pliku, zrobić, git rm -fa następnie przywrócić kopię.
jonescb 30.09.10
Ten sam człowiek. Zrób gdzieś kopię, usuń ją, zatwierdź usunięty stan, dodaj pliki z powrotem i zobacz, jak są teraz ignorowane.
Jewgienij Afanasiew
18
Proszę użyć tego polecenia
git rm -rf --cached .
git add .
Czasami pliki .gitignore nie działają, nawet jeśli są poprawne. Powodem, dla którego Git ignoruje pliki, jest to, że nie są one dodawane do repozytorium. Jeśli dodałeś plik, który chcesz wcześniej zignorować, będzie on śledzony przez Git, a wszelkie pomijane reguły dopasowania zostaną pominięte. Git robi to, ponieważ plik jest już częścią repozytorium.
Czuję się jak noob z tego powodu ... cholera Windows
Coty Embry
Masz pojęcie, dlaczego kodowanie pliku ma znaczenie? Może niewłaściwie czytana ścieżka?
Chargnn
2
Co zrobiłem, aby zignorować plik settings.php :
git rm - cached sites / default / settings.php
zatwierdzenie (do tej pory nie działało)
ręcznie usunięte strony / default / settings.php (to załatwiło sprawę)
git add.
zatwierdzić (zignorowano pomyślnie)
Myślę, że jeśli istnieje plik zatwierdzony w Git, to ignorowanie nie działa zgodnie z oczekiwaniami. Wystarczy usunąć plik i zatwierdzić. Potem to zignoruje.
Są przypadki, np. Pliki konfiguracji aplikacji, które chcę śledzić w git (więc .gitignore nie będzie działać), ale muszę je zmienić dla ustawień lokalnych. Nie chcę, aby git zarządzał tymi plikami lub wyświetlał je jako zmodyfikowane. Aby to zrobić, używam skip-worktree:
git update-index --skip-worktree path/to/file
Możesz potwierdzić, że pliki są pomijane, wyświetlając listę plików i sprawdzając, czy linie zaczynające się na literę S są pomijane
git ls-files -v | grep ^S
Jeśli w przyszłości chcesz, aby git ponownie zarządzał plikiem lokalnie, po prostu uruchom:
git update-index --no-skip-worktree path/to/file
Mescalito powyżej miało świetną odpowiedź, która poprowadziła mnie właściwą drogą, ale
git update-index --assume-niezmieniony plik / to / ignore.php
Ma umowę z git, w której: użytkownik obiecuje nie zmieniać pliku i pozwala Gitowi założyć, że działający plik drzewa pasuje do tego, co jest zapisane w indeksie.
Zmieniam jednak zawartość plików, więc w moim przypadku lepszym rozwiązaniem jest --skip-worktree.
Kolejny możliwy powód - kilka wystąpień klientów git działających jednocześnie . Na przykład „git shell” + „GitHub Desktop” itp.
Zdarzyło mi się to, używałem „GitHub Desktop” jako głównego klienta i ignorowałem nowe ustawienia .gitignore: zatwierdzanie po zatwierdzeniu:
Popełniasz coś.
Następnie zatwierdzenie: ignoruje ustawienia .gitignore. Zatwierdzanie zawiera wiele plików tymczasowych wymienionych w .gitignore.
Wyczyść pamięć podręczną git; sprawdź, czy .gitignore to UTF8; usuń pliki -> zatwierdz - - przenieś pliki z powrotem; pomiń 1 zatwierdzenie - nic nie pomogło.
Powód : edytor Visual Studio Code działał w tle z tym samym otwartym repozytorium. VS Code ma wbudowaną kontrolę git, co powoduje pewne konflikty.
Rozwiązanie : sprawdź dwukrotnie wielu ukrytych klientów git i używaj tylko jednego klienta git jednocześnie, szczególnie podczas czyszczenia pamięci podręcznej git.
gdzie repozatem jest wspomniany wyżej „root” (nazwałbym go rootem twojego drzewa roboczego) i .gitignorezawiera tylko sites/default/settings.php, ignorowanie działa dla mnie (i nie ma znaczenia, czy .gitignorezostanie dodane do repo, czy nie). Czy to pasuje do twojego układu repo? Jeśli nie, co się różni?
Tak. Jest dokładnie taki sam jak twój. Ale nie działa. Wszystkie inne wzorce działają. Jak powiedziałem, problem jest z pewnością związany z folderem settings.php.
Nick.h
Uważam, że trzymanie rzeczy w repozytorium i ignorowanie zmian w nim jest bardzo złym pomysłem.
Jewgienij Afanasiew
@YevgeniyAfanasyev z wyjątkiem rzeczy takich jak dane wyjściowe kompilacji, ustawienia użytkownika IDE, wszystkie inne pliki tymczasowe generowane przez twój zestaw narzędzi…
Chris F Carroll
Miałem na myśli utrzymanie popełnionego w repozytorium, a nie tylko plików znajdujących się w folderze projektu. Dlaczego potrzebujesz plików tymczasowych w repozytorium?
Jewgienij Afanasyjew,
0
Na wypadek, gdyby ktoś w przyszłości miał ten sam problem, co ja:
Jeśli korzystasz z
*
!/**/
!*.*
sztuczka, aby usunąć pliki binarne bez rozszerzenia, upewnij się, że WSZYSTKIE inne linie gitignore są PONIŻEJ. Git będzie czytał z .gitignore od góry, więc mimo że miałem „test.go” w moim gitignore, był on pierwszy w pliku i stał się „nieignorowany” po
Odpowiedzi:
Upewnij się, że
.gitignore
znajdujesz się w katalogu głównym katalogu roboczego, w tym katalogu uruchomgit status
i skopiuj ścieżkę do pliku z wyjścia statusu i wklej go do pliku.gitignore
.Jeśli to nie zadziała, prawdopodobnie plik jest już śledzony przez Git. Możesz to potwierdzić za pomocą danych wyjściowych
git status
. Jeśli pliku nie ma na liście w sekcji „Nieśledzone pliki” , oznacza to, że jest już śledzony przez Git i zignoruje regułę z.gitignore
pliku.Powodem ignorowania plików w Git jest to, że nie zostaną one dodane do repozytorium. Jeśli wcześniej dodałeś plik, który chcesz zignorować, będzie on śledzony przez Git, a reguły ignorowania pasujące do niego zostaną pominięte. Git robi to, ponieważ plik jest już częścią repozytorium.
Aby faktycznie zignorować plik, musisz go wyśledzić i usunąć z repozytorium. Możesz to zrobić za pomocą
git rm --cached sites/default/settings.php
. Spowoduje to usunięcie pliku z repozytorium bez fizycznego usuwania pliku (tak właśnie--cached
działa). Po zatwierdzeniu tej zmiany plik zostanie usunięty z repozytorium, a zignorowanie go powinno działać poprawnie.źródło
.git
katalog się znajduje i który sam jest katalogiem głównym repozytorium. Podobnie jak w przypadku klonowania repozytorium,/xy/
wówczas/xy/
katalog roboczy zawiera/xy/.git/
wewnątrz.git add .
po,git rm --cached
aby poprawnie odbudować indeks.Wpadłem na to, to stare pytanie, ale chcę, aby ten plik był śledzony, ale aby nie śledzić go na niektórych kopiach roboczych, aby to zrobić, możesz uruchomić
źródło
.gitignore zignoruje tylko pliki, które nie zostały jeszcze dodane do repozytorium.
Jeśli zrobiłeś
git add .
, a plik został dodany do indeksu, .gitignore ci nie pomoże. Musisz to zrobić,git rm sites/default/settings.php
aby go usunąć, a następnie zostanie zignorowany.źródło
git rm
powinien to zrobić, ale może to wymagać podania opcji -f, która usunęłaby go z katalogu roboczego. Nie wymyśliłem tego inaczej niż zrobić kopię pliku, zrobić,git rm -f
a następnie przywrócić kopię.Proszę użyć tego polecenia
Czasami pliki .gitignore nie działają, nawet jeśli są poprawne. Powodem, dla którego Git ignoruje pliki, jest to, że nie są one dodawane do repozytorium. Jeśli dodałeś plik, który chcesz wcześniej zignorować, będzie on śledzony przez Git, a wszelkie pomijane reguły dopasowania zostaną pominięte. Git robi to, ponieważ plik jest już częścią repozytorium.
źródło
Miałem ten sam problem. Pliki zdefiniowane
.gitingore
tam, gdzie są wyświetlane jako pliki nieśledzone podczas działaniagit status
.Powodem było to, że
.gitignore
plik został zapisany wUTF-16LE
kodowaniu, a nie wUTF8
kodowaniu.Po zmianie kodowania
.gitignore
pliku naUTF8
to działało dla mnie.źródło
Co zrobiłem, aby zignorować plik settings.php :
Myślę, że jeśli istnieje plik zatwierdzony w Git, to ignorowanie nie działa zgodnie z oczekiwaniami. Wystarczy usunąć plik i zatwierdzić. Potem to zignoruje.
źródło
Są przypadki, np. Pliki konfiguracji aplikacji, które chcę śledzić w git (więc .gitignore nie będzie działać), ale muszę je zmienić dla ustawień lokalnych. Nie chcę, aby git zarządzał tymi plikami lub wyświetlał je jako zmodyfikowane. Aby to zrobić, używam skip-worktree:
Możesz potwierdzić, że pliki są pomijane, wyświetlając listę plików i sprawdzając, czy linie zaczynające się na literę S są pomijane
Jeśli w przyszłości chcesz, aby git ponownie zarządzał plikiem lokalnie, po prostu uruchom:
Mescalito powyżej miało świetną odpowiedź, która poprowadziła mnie właściwą drogą, ale
git update-index --assume-niezmieniony plik / to / ignore.php
Ma umowę z git, w której: użytkownik obiecuje nie zmieniać pliku i pozwala Gitowi założyć, że działający plik drzewa pasuje do tego, co jest zapisane w indeksie.
Zmieniam jednak zawartość plików, więc w moim przypadku lepszym rozwiązaniem jest --skip-worktree.
Witryna Toshiharu Nishiny zapewniła doskonałe wyjaśnienie pomijania-pracy bez zakładania-niezmienionego: Ignoruj pliki już zarządzane lokalnie za pomocą Git
źródło
Kolejny możliwy powód - kilka wystąpień klientów git działających jednocześnie . Na przykład „git shell” + „GitHub Desktop” itp.
Zdarzyło mi się to, używałem „GitHub Desktop” jako głównego klienta i ignorowałem nowe ustawienia .gitignore: zatwierdzanie po zatwierdzeniu:
Powód : edytor Visual Studio Code działał w tle z tym samym otwartym repozytorium. VS Code ma wbudowaną kontrolę git, co powoduje pewne konflikty.
Rozwiązanie : sprawdź dwukrotnie wielu ukrytych klientów git i używaj tylko jednego klienta git jednocześnie, szczególnie podczas czyszczenia pamięci podręcznej git.
źródło
Upewnij się, że .gitignore nie ma rozszerzenia !! Nie może to być .gitignore.txt, w systemie Windows wystarczy nazwać plik .gitignore. i to zadziała.
źródło
Właśnie próbowałem tego z git 1.7.3.1 i podałem taką strukturę:
gdzie
repo
zatem jest wspomniany wyżej „root” (nazwałbym go rootem twojego drzewa roboczego) i.gitignore
zawiera tylkosites/default/settings.php
, ignorowanie działa dla mnie (i nie ma znaczenia, czy.gitignore
zostanie dodane do repo, czy nie). Czy to pasuje do twojego układu repo? Jeśli nie, co się różni?źródło
Na wypadek, gdyby ktoś w przyszłości miał ten sam problem, co ja:
Jeśli korzystasz z
sztuczka, aby usunąć pliki binarne bez rozszerzenia, upewnij się, że WSZYSTKIE inne linie gitignore są PONIŻEJ. Git będzie czytał z .gitignore od góry, więc mimo że miałem „test.go” w moim gitignore, był on pierwszy w pliku i stał się „nieignorowany” po
źródło
Próbowałem większość powyższych poleceń na terminalu VS Code i dostałem błędy takie jak:
fatal: pathspec '[dir]/[file]' did not match any files
Otworzyłem projekt na GitHub Desktop i stamtąd zignorowałem i zadziałało.
źródło