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.


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


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).


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.


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.


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?


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.


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!


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).


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.


1

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

Nie działa

/srv/bootstrap/

Praca

srv/bootstrap/

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.


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).


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.