Gitignore nie działa

275

Mój .gitignoreplik z jakiegoś powodu nie działa i żadna liczba Googlingów nie była w stanie go naprawić. Oto co mam:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

Jest w katalogu master, który jest moim repozytorium git. Korzystam z Git 1.8.4.2, ponieważ korzystam z MacBooka z systemem OSX 10.8.6.

użytkownik3280133
źródło
4
1. jakie pliki są indeksowane, chociaż nie powinny? 2. Czy dodałeś plik .gitignore po dodaniu tych plików do repozytorium?
Ahmad
2
@Ahmad W wielu projektach /bin/folder nadal pokazuje, kiedy robię git status. Nie zmieniłem tych plików, odkąd dodałem.gitignore
user3280133
1
„odkąd dodałem .gitignore” - więc dodałeś .gitignore po dodaniu plików?
Ahmad
3
możliwy duplikat .gitignore nie działa
Liam,

Odpowiedzi:

684

Pliki / folder w twojej kontroli wersji nie usuwają się tylko dlatego, że dodałeś je do .gitignore . Są już w repozytorium i musisz je usunąć. Możesz to po prostu zrobić w ten sposób:

( Pamiętaj, aby zatwierdzić wszystko, co zmieniłeś, zanim to zrobisz ).

git rm -rf --cached .
git add .

To usuwa wszystkie pliki z repozytorium i dodaje je z powrotem (tym razem przestrzegając reguł w twoim .gitignore).

Ahmad
źródło
2
lub możesz po prostu spróbować przywrócić pliki / foldery, które dodałeś do .gitignore za pomocą git checkout folder_to_ignore / *
Zahra
1
@Greenish, ale to nie działałoby, jeśli zostały już popełnione, działałyby tylko, gdyby zostały zainscenizowane, co w przypadku, gdyby folder był już w .gitignore nie powinno się zdarzyć (chyba że wymusisz dodanie) :)
Ahmad
1
nie działa dla mnie, gdy pcham zmiany do github. Mówi, że wszystko jest aktualne !!!!
Dr. Younes Henni
1
Przepraszam Ahmed Naprawiłem problem, usuwając plik gitignore, a następnie ciągnąc i przekazując ponownie do zdalnego repozytorium. Nie pamiętam już, co powiedział, gdy wpisałem status git. Mój problem został rozwiązany. Wielkie dzięki.
Dr. Younes Henni,
3
Myślę, że lepiej git dodać polecenie „git ignore”, aby to uprościć. W ten sposób możemy po prostu użyć git ignore path/filew dowolnym momencie.
Tiw
123

Aby wyśledzić pojedynczy plik, który został już dodany / zainicjowany do repozytorium, tj. Przestań śledzić plik, ale nie usuń go z systemu: git rm --cached filename

Aby wyśledzić każdy plik, który jest teraz w .gitignore:

Najpierw zatwierdź wszelkie zaległe zmiany kodu, a następnie uruchom następującą komendę:

git rm -r --cached .

Spowoduje to usunięcie wszystkich zmienionych plików z indeksu (obszaru przejściowego), a następnie wystarczy uruchomić:

git add .

Zatwierdź to:

git commit -m ".gitignore is now working"
Nicolas
źródło
Pamiętaj, aby scalić gałęzie z powrotem w celu opanowania lub przesunąć wskaźnik, ponieważ gdy spróbowałem, straciłem obie gałęzie funkcji. Na szczęście nie straciłem żadnej pracy, wszystkie moje najnowsze aktualizacje z działającej gałęzi zostały zresetowane do gałęzi głównej, ale w zależności od konfiguracji takie zachowanie może być niepożądane.
Sanka
Jak poszedłbyś za pomocą tego polecenia, aby usunąć folder z pamięci podręcznej zamiast pliku?
RealMJDev
15

Po zejściu trochę z króliczej nory, próbując podążać za odpowiedziami na to pytanie (być może dlatego, że musiałem to zrobić w projekcie studia wizualnego), uznałem, że łatwiejszą drogą było

  1. Wytnij i wklej plik (i), których nie chcę już śledzić w lokalizacji tymczasowej

  2. Zatwierdź „usunięcie” tych plików

  3. Wprowadź modyfikację, .gitignoreaby wykluczyć pliki, które zostały tymczasowo przeniesione

  4. Przenieś pliki z powrotem do folderu.

Uważam, że jest to najprostszy sposób, aby to zrobić (przynajmniej w studio wizualnym, lub założyłbym inne środowisko oparte na falowaniu IDE, takie jak Android Studio), bez przypadkowego strzelania sobie w stopę z dość wszechobecną git rm -rf --cached ., po czym projekt studia wizualnego, nad którym pracowałem, nie został załadowany.

Garrett Simpson
źródło
2
Bardzo podoba mi się to podejście - wydaje się mniej destrukcyjne, nawet jeśli nie jest uważane za „właściwe”.
theyetiman
6

W moim przypadku była to pusta przestrzeń na początku pliku, która wyraźnie pokazywała się, gdy otworzyłem plik w Notatniku, nie było to oczywiste w programie Visual Studio Code.

S Saad
źródło
4

Użyłem czegoś do wygenerowania wspólnego .gitignoredla mnie i wpadłem na to. Po przeczytaniu odpowiedzi @Ozesh otworzyłem w kodzie VS, ponieważ ma ładny wskaźnik w prawym dolnym rogu, pokazujący rodzaj zakończeń linii. To był LF, więc przekonwertowałem na CRLF, jak sugerowałem, ale żadnych kości.

Potem spojrzałem obok zakończeń linii i zauważyłem, że został zapisany za pomocą UTF16. Więc zapisałem ponownie używając UTF8 kodującego voila, zadziałało. Nie sądziłem, że CRLF ma znaczenie, więc dla pewności zmieniłem go z powrotem na LF i nadal działa.

Oczywiście nie był to problem z PO, ponieważ już dokonał plików, więc zostały one już zindeksowane, ale pomyślałem, że podzielę się nimi na wypadek, gdyby ktoś inny się z tym natknął.

TLDR ; Jeśli jeszcze nie zatwierdziłeś plików, a .gitignore nadal nie jest przestrzegany, sprawdź kodowanie plików i upewnij się, że jest to UTF8, a jeśli to nie zadziała, może spróbuj zadzwonić z zakończeniami linii.

DeezCashews
źródło
1
Winowajcą był dla mnie UTF16. Otwarty kod VS> otwarty .gitignore> otworzył wiersz polecenia> „Zmień kodowanie pliku”> „UTF-8”> Zapisz plik
Michael
3

W moim przypadku przyczyną były białe spacje na końcu linii .gitignore. Uważaj więc na białe znaki w .gitignore!

026
źródło
1

Rozwiązałem problem, wykonując następujące czynności:

Przede wszystkim jestem użytkownikiem systemu Windows, ale napotkałem podobny problem. Więc zamieszczam tutaj moje rozwiązanie.

Jest jeden prosty powód, dla którego czasami .gitignore nie działa tak, jak powinien. Wynika to z zachowania konwersji EOL.

Oto szybkie rozwiązanie tego problemu

Edycja> Konwersja EOL> Format Windows> Zapisz

Możesz za to winić ustawienia edytora tekstu .

Na przykład:

Jako programista systemu Windows zazwyczaj używam Notatnika ++ do edycji tekstu, w przeciwieństwie do użytkowników Vima.

Tak się dzieje, gdy otwieram plik .gitignore za pomocą Notepad ++, wygląda to tak:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Jeśli otworzę ten sam plik za pomocą domyślnego Notatnika, otrzymam to

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

Być może już zgadłeś, patrząc na wynik. Wszystko w .gitignore stało się jednowierszowym, a ponieważ na początku jest ##, działa tak, jakby wszystko było komentowane.

Sposób rozwiązania tego jest prosty: wystarczy otworzyć plik .gitignore w Notepad ++, a następnie wykonać następujące czynności

Edycja> Konwersja EOL> Format Windows> Zapisz

Przy następnym otwarciu tego samego pliku w domyślnym notatniku systemu Windows wszystko powinno być odpowiednio sformatowane. Wypróbuj i sprawdź, czy to Ci odpowiada.

Ozesh
źródło
1

Ponadto komentarze muszą być na własnej linii. Nie można ich umieścić po wejściu. Więc to nie zadziała:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

Ale to zadziała:

# fine to comment here
/node_modules
Ben Pritchard
źródło
0

Czy git reset --harddziała dla kogoś? Nie twierdzę, że to dobre rozwiązanie, po prostu wydawało się, że działa po raz pierwszy.

użytkownik1889992
źródło
Proszę zignorować mój komentarz powyżej. Ktoś w pracy zrobił coś tak złego w Git, że spowodowało to zduplikowanie folderów i przez dłuższy czas nie byłem świadomy. Dzięki.
user1889992,
0

Popełniłem wielki błąd podczas edycji mojego dockerignore, działałem świetnie po znalezieniu odpowiedniego pliku zignorowania: p


źródło
0

Dodanie mojego kawałka, ponieważ jest to popularne pytanie.

Nie mogłem umieścić katalogu .history wewnątrz .gitignore, ponieważ bez względu na to, jakiej kombinacji próbowałem, po prostu nie działało. System Windows generuje nowe pliki przy każdym zapisie i nie chcę ich wcale widzieć.

wprowadź opis zdjęcia tutaj

Ale potem zdałem sobie sprawę, że to tylko moje osobiste środowisko programistyczne na moim komputerze. Rzeczy takie jak .history lub .vscode są dla mnie specyficzne, więc byłoby dziwnie, gdyby każdy umieścił własne wpisy .gitignore na podstawie używanego IDE lub systemu operacyjnego.

Więc to zadziałało dla mnie, po prostu dodaj „.history” do .git / info / exclude

echo ".history" >> .git/info/exclude
Daniel Katz
źródło