Git ignoruje pliki, których nie ma w gitignore

117

Mam repozytorium git, które ignoruje pliki obrazów, a także kilka innych plików, ale mój .gitignoreplik ma tylko ignorowanie config.phppliku. Czy jest gdzieś jakiś globalny plik ignorowania, którego nie mogę znaleźć? Muszę określić pliki, aby je teraz dodać, i to daje mi to ostrzeżenie:

Poniższe ścieżki są ignorowane przez jeden z plików .gitignore.

Zawartość mojego ~/.gitconfigpliku to tylko mój adres e-mail.

Ian Hunter
źródło

Odpowiedzi:

198

git check-ignore

Użyj git check-ignorepolecenia, aby debugować plik gitignore (wyklucz pliki).

Na przykład:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

Powyższe dane wyjściowe zawierają szczegółowe informacje o pasującym wzorcu (jeśli istnieje) dla każdej podanej ścieżki (w tym linii).

Więc może rozszerzenie pliku nie jest ignorowane, ale cały katalog.

Zwrócony format to:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

Lub użyj następującego polecenia, aby wydrukować swój .gitignorekatalog domowy użytkownika i folder repozytorium:

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

Alternatywnie użyj, git add -fktóra pozwala na dodanie ignorowanych plików.

Patrz man gitignore, man git-check-ignorena więcej szczegółów.

Składnia

git check-ignore [opcje] nazwa ścieżki…

git check-ignore [opcje] --stdin

kenorb
źródło
5
To znacznie lepsze niż akceptowana odpowiedź. Bez obrazy, ale to uratowało mi dzień. Dziękuję kenorb.
luanjunyi
1
Zasługuje na więcej głosów. Okazało się, że jakiś dziwny gitignore w niektórych folderach / vendor / powodował problemy z najnowszą wersją git.
Manuel Arwed Schmidt,
2
ten uratował mnie dzisiaj ... wygląda na to, że Visual Studio utworzyło plik o nazwie gitignore_global.txt w folderze dokumentów użytkownika i to ignorowało pliki, których nie mogłem (nie) zignorować
Samuel
1
Doskonale rozwiązał mój problem. Niektóre wzory nie są łatwe do zauważenia !!
Willa
54

Warto wiedzieć, że konfiguracja git może zawierać plik core.excludesfile, który jest ścieżką do pliku z dodatkowymi wzorcami, które są ignorowane. Możesz dowiedzieć się, czy masz taką konfigurację, uruchamiając (w problematycznym repozytorium git):

git config core.excludesfile

Jeśli drukuje ścieżkę do pliku, spójrz na zawartość tego pliku, aby uzyskać dalsze informacje.

W moim przypadku zainstalowałem git za pomocą starej wersji boxena, która ignorowała wzorzec „Ikona?” że w moim przypadku dało mi ostrzeżenie, o którym mowa w tym pytaniu, dotyczące ikon folderów (jestem na systemie plików niewrażliwym na wielkość liter, dlatego Icon? dopasowuje ikony).

gabrielf
źródło
2
To był rzeczywiście mój problem. Nie jestem pewien, jak i kiedy ten plik jest edytowany, ale zawierał on plik, który chciałem
umieścić na
2
Dziękuję, zaoszczędziłeś mi godzin czystej agonii. W moim przypadku była to instalacja drzewa źródłowego (narzędzie wizualizujące repozytorium git), które nielogicznie utworzyło w folderze dokumentów plik gitignore_global.txt zawierający wiele wykluczeń.
Obiekt mechaniczny
Miałem to samo cholerne Icon?ignorowanie.
Justin Skiles,
Tak było w przypadku mnie. Miał sporo reguł w globalnym pliku ignorowania. Dzięki za wskazówkę +1
Madness
Miałem * .json w moim globalnym ignorowaniu - mów o koszmarze - dziękuję!
Jason Perfetto
31

Sprawdź te:

  1. Czy szukałeś innych plików .gitignore, ponieważ może być ich wiele.

  2. Spójrz także na REPO / .git / config, aby zobaczyć, czy coś tam jest.

  3. Wykluczenie repozytorium Lokalne reguły dotyczące repozytorium można dodać do pliku .git / info / exclude w repozytorium. Te reguły nie są zatwierdzone w repozytorium, więc nie są udostępniane innym. Tej metody można używać w przypadku plików generowanych lokalnie, których nie oczekujesz od innych użytkowników, takich jak pliki utworzone przez Twój edytor.

gahooa
źródło
W repozytorium nie ma innych plików .gitignore, ani w pliku .git / config nie ma niczego, co by cokolwiek ignorowało. Jak skonfigurowano .git / info / exclude?
Ian Hunter
4
Nie jest jasne, dlaczego ta odpowiedź jest oznaczona jako udzielona. Jak dokładnie rozwiązano ten problem?
Następny programista
wykluczyć był mój problem. Wiedziałem, że istnieje inny sposób zignorowania, którego użyłem w przeszłości, ale zapomniałem, gdzie to jest!
Chucky,
22

Miałem ten sam problem - katalog był ignorowany przez git z tym błędem:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

W końcu doszedłem do wniosku, że moim problemem jest linia w moim ~/.gitignore_global:

TAGS

który pasował do ścieżki app/views/admin/tags. Naprawiłem to, dodając wiodący ukośnik do globalnego pliku gitignore

/TAGS

i git ponownie zaczął śledzić mój katalog.

Shevaun
źródło
3
+1 za zmuszenie mnie do szukania częściowych dopasowań ... gitignore_global.txt zawierał "[Rr] elease * /", co powodowało, że mój katalog "releaseasenotes" był ignorowany.
Trev
Aby było jeszcze trudniej, git zignoruje tylko nowo dodane pliki, a nie te, które są już w repozytorium. Więc kiedy dodałem "foo /" do mojego .gitignore, zignorował tylko ostatnio dodane pliki w podkatalogach foo, a nie wszystkie pliki. Zajęło mi godzinę, aby dowiedzieć się, dlaczego niektóre pliki były ignorowane, a inne nie.
ccleve
Mam ten sam problem. SourceTree ustawia plik ~ / .gitignore_global w menu Narzędzia-> element Opcje-> zakładka Git. Po wyczyszczeniu pola Global Ignore list "git add ..." polecenie zadziałało.
Kate,
Miałem ten sam problem. Miałem helpkatalog, który był ignorowany. Na szczęście dość szybko znalazłem odpowiedź.
Abdul Sadik Yalcin
9

U mnie przypadkowo miałem symbol wieloznaczny w moim pliku ~ / .gitignore_global. Może sprawdź tam?


źródło
1
To był właśnie problem dla mnie. Miałem tam * .png, nie mam pojęcia, jak się tam dostał.
Shahar
3

Kolejna rzecz do wypróbowania: miałem katalog B z własnym .gitrepozytorium zagnieżdżonym w katalogu projektu A (ale nie jako moduł podrzędny). Wprowadziłem kilka zmian w B i chciałem zrobić z niego prawdziwy podmoduł. Uważam, że git A automatycznie ignorował B, ponieważ zawierał własne repozytorium (zobacz Zagnieżdżone repozytoria git bez modułów podrzędnych? ). Zmieniłem nazwę folderu B i ponownie próbowałem sklonować go jako moduł podrzędny, co przyniosło mi mylący komunikat o błędzie „ignorowane przez .gitignore”. Rozwiązaniem było usunięcie .gitz B.

Matt Montag
źródło
2

Miałem dokładnie ten sam problem co ty. Jedyna odpowiedź, jaką otrzymałeś, zawierała kilka miejsc do sprawdzenia, ale żadne z nich nie rozwiązało problemu za mnie, az twojego komentarza też nie myślę za ciebie. Nie miałem INNYCH plików .gitignore ukrytych niżej w drzewie katalogów; nic w .git / config; nic w .git / ingore / exclude

Jeśli nadal masz problem, sprawdź tę odpowiedź . To rozwiązało problem za mnie

Zasadniczo poszukaj pliku ~ / .gitignore. Mój nazywał się ~ / .gitignore_global. Nie wiem, kiedy to został stworzony ( ja na pewno się nie udało), ale próbowałem mnóstwo różnej konfiguracji git właśnie wtedy po raz pierwszy zainstalowany, więc jeden z nich musi umieścić go tam.

Mam nadzieję, że jego odpowiedź również ci pomoże!

Bukov
źródło
1

Innym powodem otrzymania tego komunikatu o błędzie od git jest wykonanie git submodule addpolecenia, gdy poprzednie polecenie git uległo awarii i opuściło plik blokady (może się to zdarzyć na przykład, gdy używasz niestandardowych skryptów, które zawierają polecenia git i nie zauważyłeś wypadek).

Jeśli git commitzamiast tego wykonasz polecenie , gdy żaden z warunków się nie zmieni ( git submodule addbędzie nadal krzyczeć, że Twoje .gitignorepliki są winne), zamiast tego zobaczysz inny raport o błędzie:

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

i rzeczywiście usuwając plik blokujący:

rm .git/index.lock

rozwiązuje problem. (Dzieje się tak w przypadku gita w wersji 2.1.0.9736. Może to zostać naprawione w przyszłych wydaniach git).

Ger Hobbelt
źródło
Dzięki temu okazało się, że był to problem, który miałem. Oszczędza życie!
JDawgg
1

Sprawdź, czy masz uprawnienia do folderu. Właśnie na to wpadłem i to dlatego, że folder był własnością użytkownika danych www, a nie użytkownika, do którego byłem zalogowany na terminalu.

Conrad Jones
źródło
1

W moim przypadku problem spowodował przesunięcie w przód na mojej ścieżce ...

Nie działa

/srv/bootstrap/

Praca

srv/bootstrap/
jwogrady
źródło
1

Jeszcze jedno: jeśli katalog, w którym się znajdujesz, wymaga uprawnień roota do pisania lub wykonywania, upewnij się, że jesteś na koncie użytkownika root. W rzeczywistości pojawił się dziwny błąd, w którym próbowałem dodać podmoduł, a git narzekał, że ścieżka, do której klonowałem, była ignorowana przez plik git ignore. Potem zmieniłem się na użytkownika root, ponownie uruchomiłem submoduł add i nie było problemu.

Maharlikans
źródło
0

Należy również sprawdzić, ~/.gitignorea ~/.gitignore_globalktóre mogą być tworzone przez niektórych klientów Git (np Atlassian SourceTree na Mac OS X).

viviansteller
źródło
0

Upewnij się, że .gitignoreplik sam się nie ignoruje. Częstym błędem jest dodawanie *do .gitignorepliku reguły ignorującej każdy plik w bieżącym folderze. Rozwiązaniem tego problemu jest dodanie wyjątku do .gitignore:

*
!.gitignore

W ten sposób wszystkie pliki w katalogu zostaną zignorowane, z wyjątkiem .gitignore.

jfoliveira
źródło