Mój .gitignore
plik wydaje się być ignorowany przez Git - czy .gitignore
plik może być uszkodzony? Jakiego formatu pliku, ustawień regionalnych lub kultury oczekuje Git?
Mój .gitignore
:
# This is a comment
debug.log
nbproject/
Wyjście z git status
:
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# debug.log
# nbproject/
nothing added to commit but untracked files present (use "git add" to track)
Chciałbym debug.log
i nbproject/
nie pojawiać się na liście nieśledzonych plików.
Gdzie powinienem zacząć to naprawiać?
.gitignore
plik używaANSI
lubUTF-8
koduje. Jeśli używa czegoś innegoUnicode BOM
, Git nie może odczytać pliku.echo "file" > .gitignore
w PowerShell, plik miał kodowanie UCS-2!git rm --cached debug.log nbproject/
Odpowiedzi:
Nawet jeśli do tej pory nie śledziłeś plików, Git wydaje się być w stanie o nich wiedzieć nawet po ich dodaniu
.gitignore
.OSTRZEŻENIE: Najpierw zatwierdź swoje bieżące zmiany, inaczej je stracisz.
Następnie uruchom następujące polecenia z górnego folderu repozytorium Git:
źródło
Jeśli wydaje się, że Git nie zauważa zmian dokonanych w
.gitignore
pliku, możesz sprawdzić następujące punkty:.gitignore
plik globalny , który może kolidować z plikiem lokalnymKiedy dodajesz coś do pliku .gitignore, spróbuj tego:
Jeśli usuniesz coś z pliku .gitignore i powyższe kroki mogą nie działać, jeśli zauważysz, że powyższe kroki nie działają, spróbuj tego :
źródło
git rm -r --cached .
pracował dla mnieNaprawiony. OK, utworzyłem plik .gitignore w Notatniku w systemie Windows i nie działał. Kiedy przeglądałem plik .gitignore w systemie Linux, wyglądał jak zorganizowany bełkot - być może Notatnik napisał Unicode zamiast ASCII lub cokolwiek 8-bitowego.
Więc przepisałem plik na moim Linux-ie, a kiedy ściągnąłem go z powrotem do systemu Windows, działa dobrze! Hurra!
źródło
Bez dodawania kolejnego zatwierdzenia do projektu wystarczy jedna linia, aby wykonać
.gitignore
pracę tak, jak powinna:Spowoduje to usunięcie ich z repozytorium, ale nadal pozostanie fizycznie. Mówiąc wprost, usuwa historię zmian związanych z nimi, a także nie śledzi ich zmian w żadnym późniejszym zatwierdzeniu. Możesz znaleźć lepsze wyjaśnienie tutaj .
źródło
git rm -r --cached someFile.php
Inną przyczyną tego problemu są puste spacje lub tabulatory przed instrukcją:
Przykład:
I jak wskazano w komentarzu poniżej, spacją może być również problem:
źródło
*.txt # Tex files
. Ale git rozumie: „Zignoruj pliki z rozszerzeniemtxt
”Zauważyłem, że kodowanie
.gitignore
miało wpływ - jeśli plik był Unicode, był ignorowany, jeśli był to ASCII, nie był.Proces:
PS> git status
.gitignore
Kodowanie testu :PS> Get-FileEncoding .gitignore
PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
PS> git status
źródło
touch .gitignore
iecho ".db" >> .gitignore
trasowania za pomocą programu PowerShell. Odkryłem, żeecho ".db" >> .gitignore"
ustawiałem kodowanie pliku na UCS-2 LE-BOM, szybka konwersja do ASCII i gitignore zaczął działać.Podobnie jak w przypadku innych rozwiązań, popełnić pierwszy i zdawać sobie sprawę, że będzie stracić żadnych zmian un-popełnione.
Miałem z tym lepsze wyniki:
Pamiętaj, że status nie powinien mieć teraz żadnych zmodyfikowanych plików.
źródło
W moim przypadku dzieje się tak, ponieważ pliki już istnieją w repozytorium i staram się je zignorować.
Oto rzeczy, które zrobiłem, aby rozwiązać problem:
Do tego czasu wszelkie zmiany, które wprowadziłem w tych plikach, zostały zignorowane.
Myślę, że nie możesz zignorować plików, które już istnieją w repozytorium.
źródło
Wszystkie odpowiedzi tutaj są w rzeczywistości obejściami. Przed uruchomieniem musisz utworzyć plik .gitignore
git init
. W przeciwnym raziegit
nigdy nie będziesz wiedział, że musisz zignorować te pliki, ponieważ zostały już wyśledzone.Jeśli rozwijasz się na codzień, radzę dodać do Twojego
~/.gitignore_global
pliku zwykle ignorowane pliki . W ten sposóbgit
będziesz już wiedział, które pliki (co oznacza „twój użytkownik”, ponieważ jest to plik w katalogu domowym) zwykle ignorujesz.źródło
~/.gitignore_global
to konfigurowalna nazwa. Uruchomgit config --global core.excludesfile
najpierw, aby sprawdzić, czy masz już zdefiniowany plik. Jeśli nie, uruchomgit config --global core.excludesfile ~/.gitignore_global
..gitignore
najpierw: zmień nazwę śledzonego pliku..gitignore
będą stosowane tak, jakby były nowe.Sprawdź także katalog, w którym umieściłeś
.gitignore
.Powinien znajdować się w katalogu głównym Twojego projektu :
Nie w
źródło
W szczególności dla użytkowników systemu Windows: jeśli masz nieśledzone pliki, a czyszczenie / usuwanie buforowanych plików nie działa. Spróbuj otworzyć PowerShell i przekonwertować plik .gitignore na kodowanie UTF-8:
Musisz to zrobić tylko raz, aby zakodować plik .gitignore dla tego katalogu, a ponieważ plik jest następnie kodowany poprawnie, przy każdej edycji pliku w przyszłości powinien on działać. Wydaje mi się, że jest to spowodowane usterką polegającą na tym, że GitHub nie zamierza czytać kodowania innego niż UTF-8 dla pliku .gitignore. O ile mi wiadomo, ten problem nie został jeszcze rozwiązany w systemie Windows. To nie jest zbyt wielka sprawa, po prostu debugowanie, gdy nie działa.
źródło
.gitignore
Może się zdarzyć inny problem , szczególnie dla użytkownika systemu Windows. Git nie lubi tego, kiedy się nazywasz.gitignore
(np.unity.gitignore
).Zawsze będziesz chciał go nazwać
.gitignore
lub w systemie Windows,.gitignore.
ponieważ system Windows myśli, że próbujesz zmienić nazwę bez nazwy pliku.źródło
Właśnie natrafiłem na ten problem. Zawartość mojego pliku .gitignore nadal pojawiała się na liście nieśledzonych plików.
Użyłem tego, aby utworzyć plik ignorowania:
Okazuje się, że podwójne cytaty były dla mnie problemem. Usunąłem plik zignorowany, a następnie ponownie użyłem polecenia bez cudzysłowów i działało to zgodnie z oczekiwaniami. Nie musiałem zadzierać z kodowaniem plików. Używam Cmder na komputerze z systemem Windows 10 .
Przykład:
źródło
Dla mnie żadna z poprzednich odpowiedzi nie zadziałała. Musiałem skopiować
.gitignore
tekst doexclude.txt
pliku znalezionego pod adresemPo zakończeniu odśwież zmiany i znikną wszystkie nieśledzone pliki. Zobowiązuj się jak zwykle.
źródło
Moim problemem był (jak sugeruje OP) uszkodzony plik .gitignore. Nie wierzyłem, że tak, i zignorowałem tę możliwość, dopóki wszystko inne nie zawiodło. Uszkodzenie nie
vi
pojawiło się , ale na początku pliku były dwa bajty, co spowodowało zignorowanie pliku .gitignore. Dla mnie te pojawiły się tylko podczas pisaniacat .gitignore
, co pokazało:Nie mam pojęcia, jak to się tam skończyło, ale odtworzenie pliku rozwiązało problem. Analiza szesnastkowa uszkodzonego pliku wykazała, co następuje:
źródło
Miałem ten problem z plikiem .gitignore zawierającym ten wiersz:
Właśnie zdałem sobie sprawę, że w rzeczywistości ten katalog jest dowiązaniem symbolicznym do folderu w innym miejscu:
W linii
lib/ext/
Git faktycznie szuka folderu , ale dowiązanie symboliczne to plik , więc mójlib
folder nie jest ignorowany.Naprawiłem to, zastępując
lib/ext/
przezlib/ext
w moim pliku .gitignore.źródło
Miałem ten sam problem. Uważam, że problemem była rozbieżność między CR a CR + LF. Przechowałem rzeczy w moim .gitignore za pomocą CMD (w Windows 7) i następującej komendy:
Zły:
Itp.
Problem polegał na tym, że to polecenie nie umieszcza poprawnego znacznika końca linii, aby Git rozpoznał nowe linie (CR lub CR + LF, gdy Git spodziewa się drugiego). Rozwiązałem problem, ręcznie zastępując każdą nową linię w Vimie (Vim na ratunek!) I działało idealnie.
Spróbuj edytować .gitignore w Notepad ++ lub Vim (najlepiej). Nawet jeśli plik wygląda na poprawnie sformatowany, spróbuj zastąpić nowe linie. To brzmi dziwnie, wiem, ale zadziałało dla mnie. :RE
źródło
OK, więc w moim przypadku zaakceptowane rozwiązanie nie zadziałało, a to, co zadziałało, opisano tutaj:
Czy program Visual Studio 2013 ignoruje plik .gitignore?
W skrócie:
ms-persist.xml
źródło
Należy również spojrzeć na jedną rzecz: czy zapisujesz plik .gitignore z poprawnymi zakończeniami linii?
Windows:
Jeśli używasz go w systemie Windows, czy zapisujesz go z zakończeniami linii systemu Windows? Nie wszystkie programy domyślnie to robią; Notepad ++ i wiele edytorów PHP domyślnie kończy się linuxem, więc pliki będą kompatybilne z serwerem. Jednym z łatwych sposobów sprawdzenia tego jest otwarcie pliku w Notatniku Windows. Jeśli wszystko pojawia się w jednej linii, plik został zapisany z zakończeniami Linuksa.
Linux:
Jeśli masz problemy z plikiem pracującym w środowisku Linux, otwórz plik w edytorze, takim jak Emacs lub nano . Jeśli zobaczysz jakieś niedrukowalne znaki, plik został zapisany z zakończeniami linii Windows.
ź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.
To mi się przydarzyło. Używałem „GitHub Desktop” jako głównego klienta i ignorowałem niektóre nowe ustawienia .gitignore: zatwierdzanie po zatwierdzeniu:
Powód : edytor Visual Studio Code działał w tle z tym samym otwartym repozytorium. Program Visual Studio 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 na raz, szczególnie podczas czyszczenia pamięci podręcznej Git.
źródło
Jest już kilka świetnych odpowiedzi, ale moja sytuacja była nużąca. Zredagowałem źródło zainstalowanego oprogramowania PLM (zarządzanie cyklem życia produktu) na Win10, a potem zdecydowałem: „Prawdopodobnie powinienem był zrobić z tego repozytorium git”.
Tak więc opcja pamięci podręcznej nie będzie dla mnie bezpośrednio działać. Publikowanie dla innych, którzy mogli dodać kontrolę źródła PO wykonaniu kilku początkowych prac ORAZ
.gitignore
nie działa ALE, możesz bać się stracić sporo pracy, więcgit rm --cached
nie jest to dla ciebie.! WAŻNE: Jest tak, ponieważ dodałem git za późno do „projektu”, który jest zbyt duży i wydaje się ignorować mój .gitignore. Nigdy nie mam zobowiązań. Mogę z tego zrezygnować :)
Po pierwsze:
Następnie musiałem mieć obraz moich zmian. Ponownie, jest to produkt instalacyjny, w którym wprowadziłem zmiany. Za późno na pierwsze zatwierdzenie czystej gałęzi master. Potrzebowałem więc listy tego, co zmieniłem, odkąd zainstalowałem program, dodając
> changed.log
jedną z następujących opcji:PowerShell
Grzmotnąć
Teraz mam swoją listę zmian, które zmieniłem w ciągu ostatnich dziesięciu dni (nie zajmujmy się tutaj najlepszymi praktykami poza tym, że powiedziałem: tak, zrobiłem to sobie).
Na dobry początek, teraz:
Musiałem porównać moją zmienioną listę z moim rosnącym .gitignore, działającym w
git status
miarę , jak go ulepszałem, ale moje zmiany w .gitignore są odczytywane podczas pracy.Wreszcie mam listę pożądanych zmian! W moim przypadku jest to płyta główna - niektóre motywy działają wraz z konfiguracjami serwera xml specyficznymi dla uruchamiania systemu deweloperskiego przeciwko temu oprogramowaniu, które chcę umieścić w repozytorium, aby inni deweloperzy mogli go pobrać i wesprzeć ... To będzie nasza gałąź master, więc zobowiązanie, pchanie, a na koniec ODBUDOWA nowej pracy!
źródło
Wystarczy usunąć folder lub plik, który został wcześniej zatwierdzony w Git, za pomocą następującego polecenia. Następnie plik gitignore będzie odzwierciedlał poprawne pliki.
źródło
Jedną z trudnych rzeczy, które nie zostały uwzględnione w innych odpowiedziach tutaj, jest to, że plik .gitignore nie będzie działać, jeśli masz wbudowane komentarze, takie jak to:
Jeśli masz takie komentarze, zmień je w następujący sposób:
źródło
Istnieje również możliwość edycji
.gitignore
pliku za pomocąsudo
polecenia. Napotkałem ten sam problem i podczas wykonywania poleceń:git status
nadal widziałem pliki „należy zignorować”.Po edycji z
nano .gitignore
zamiastsudo nano .gitignore
, mogłem zobaczyć prawidłowe odbicie.źródło
Utworzyłem .gitignore przy użyciu programu
echo "..." > .gitignore
PowerShell w systemie Windows, ponieważ nie pozwala mi to tworzyć w Eksploratorze Windows.Problem w moim przypadku polegał na kodowaniu utworzonego pliku, a problem został rozwiązany po zmianie go na ANSI.
źródło
Ja również mam ten sam problem na Ubuntu, utworzyłem go
.gitignore
z terminala i działa dla mnietouch .gitignore
źródło
Mój nie działał, ponieważ dosłownie stworzyłem dokument tekstowy o nazwie .gitignore
Zamiast tego utwórz dokument tekstowy, otwórz go w Notepad ++, a następnie zapisz jako .gitignore
Pamiętaj, aby podczas zapisywania wybrać Wszystkie typy (*. *) Z menu rozwijanego.
Lub w gitbash, po prostu użyj
touch .gitignore
źródło
Jeśli jesteś użytkownikiem Notepad ++ , spróbuj wykonać następujące czynności:
Otwórz plik .gitignore za pomocą Notepad ++ i wykonaj:
Menu Edycja → Konwersja EOL → Format Windows → Zapisz .
Spróbuj użyć
git status
ponownie i sprawdź, czy to działa dla Ciebie.Odpowiedzi na podobne pytanie zamieściłem tutaj .
źródło
Dla mnie był to kolejny problem. Mój plik .gitignore jest skonfigurowany tak, aby ignorować wszystko oprócz rzeczy, które, jak mówię, nie należy ignorować. Podobnie jak:
To oczywiście oznacza, że mówię Gitowi, aby zignorował sam plik .gitignore. Co nie stanowiło problemu, dopóki nie śledziłem pliku .gitignore. Ale w pewnym momencie popełniłem sam plik .gitignore. Doprowadziło to następnie do prawidłowego zignorowania pliku .gitignore.
Więc dodanie jeszcze jednej linii to naprawiło:
źródło
Mój problem polegał na tym, że zapisałem pliki, aby je zignorować cudzysłowami „”, a nie ukośnikiem /.
To nie działało i zostało zignorowane przez git:
To działało dobrze:
Sprawdziłem również kodowanie plików w systemie Windows za pomocą Notepad ++. Kodowanie zostało ustawione na UTF-8.
źródło