Utworzyłem plik .gitignore_global
i umieściłem go w katalogu instalacyjnym git. Kiedy uruchamiam polecenie:
git config --global core.excludesfile ~/.gitignore
reguły w pliku ignorowania nie są stosowane do moich zatwierdzeń.
Kiedy zmieniam nazwę pliku .gitignore
i umieszczam go w katalogu głównym projektu, obowiązują zasady.
Co tu jest nie tak?
Odpowiedzi:
Może musisz zrobić:
I napić się kawy.
źródło
gitignore
plik działa tylko w przypadku nieśledzonych plików, a nie tych, które zostały dodane wcześniejPomyślałem, że wtrącę się w to. Jest jeszcze jeden powód, dla którego wydaje się, że globalny plik ignorowania nie działa. Jest to coś, o czym nie sądzę, by zostało uwzględnione we wcześniejszych odpowiedziach. To tak oślepiająco oczywiste, że - oczywiście - bardzo łatwo go przeoczyć.
To znaczy, że git będzie ignorował tylko nowe pliki . Jeśli plik jest już śledzony przez git, to oczywiście git go nie zignoruje! Więc jakiekolwiek wzorce w jakimkolwiek pliku
gitignore
lubexclude
pliku nie mają zastosowania .To ma sens. Dlaczego git miałby chcieć ignorować modyfikacje plików, które już śledzi? Jeśli plik ma zostać zignorowany, musisz najpierw powiedzieć gitowi, aby go nie śledził, a następnie git zignorować go, jak opisano w podręczniku. Aby uzyskać informacje na temat usuwania śledzenia plików, zobacz tę odpowiedź .
To wszystko prowadzi mnie do pytania, czy można zignorować zmiany w śledzonych plikach? Ponownie, git zapewnia. Ta odpowiedź; Git: Ignore tracked files daje nam polecenie (zamień
file
na plik, który chcesz zignorować):git update-index --assume-unchanged file
Na koniec, oto dodatkowe informacje na temat debugowania git ignore.
Strona podręcznika gitignore (5) mówi nam:
Jest to więc nowe i zastępuje poprzednie
~/.gitignore_global
wspomniane wcześniej.Następnie, i to jest naprawdę przydatne, jest to, że od 1.8.2 mamy teraz kilka doskonałych narzędzi do debugowania. Spójrz na:
Git uczy się ignorować lepiej - nowość w wersji 1.8.2
To pokazuje, jak użyć
check-ignore
flagi new, aby sprawdzić, czy git pomyślnie ignoruje twoje wzorce, npgit check-ignore bin/a.dll --verbose
źródło
git update-index --assume-unchanged file
był dokładnie tym, czego szukałem, dzięki!Odkryłem, że kiedy zdefiniowałem
global core.excludesfile
tak:to nie zadziałało. Zmieniając go, aby nie używał
$HOME
zmiennej, na przykład:natychmiast zaczął działać. Mam nadzieję, że to pomoże komuś innemu.
FYI:
źródło
Uwaga: uruchamianie git1.7.12 (sierpień 2012) :
Więc jeśli tworzysz
$HOME/.config/git/attributes
plik, nie musisz nawet zmieniaćcore.excludesfile
ustawień.źródło
Plik musi znajdować się w twoim katalogu domowym. W systemie Windows oznacza to zazwyczaj: C: \ dokumenty i ustawienia \ [użytkownik].
W systemie Linux jest to: / home / [użytkownik]
źródło
Miałem ten problem, ponieważ początkowo wywołałem `` git config core.excludefiles '' bez opcji --global i ze złą wartością, a zatem zapisałem właściwość lokalnie. Wygląda na to, że lokalna właściwość ukryła globalną (która miała poprawną wartość), całkowicie ją ignorując.
źródło
Kolejny powód, dla którego globalne ignorowanie przez git może nie działać: niewidoczne znaki na ścieżce.
Dowiedziałem się, że to mój problem podczas wklejania ostrzeżenia z git-check-ignore do paska adresu Chrome, gdzie na szczęście stał się widoczny:
(Nie było to widoczne na terminalu. A to mogła być długa królicza dziura debugowania ... 😅)
źródło
Miałem ten sam problem (w systemie Windows). Skończyło się na sprawdzeniu mojego
~/.gitconfig
pliku i stwierdzeniu, że mójexcludesfile
został ustawiony na:ale powinno być:
Po zmianie wszystko działało tak, jak powinno.
źródło
Miałem też zabawną rzecz z kodowaniem tego pliku. W jakiś sposób mój Windows 10 (z Powershell) utworzył plik z kodowaniem „UTF-16 LE” i Git jakoś nie mógł sobie z tym poradzić. Kiedy zmienię kodowanie na znacznie bardziej rozsądną wartość dosłownie czegokolwiek innego, zadziałało.
źródło
Innym trudnym do wyśledzenia powodem, dla którego .gitignore (_global) wydaje się nie działać, mogą być początkowe spacje w wierszach. Plik nie wybacza spacji wiodących. Więc upewnij się, że żadna linia twojego pliku nie zawiera żadnych, chyba że jest pusta. Zajęło mi trochę czasu, zanim się zorientowałem.
Dodam tylko moje dwa centy.
źródło
Niedawno popełniłem błąd i uruchomiłem następujące polecenie, które
git config core.excludesfile tags
zmieniło ścieżkę excludesfile do pliku lokalnego w bieżącym repozytorium, a ta konfiguracja została zapisana do lokalnego pliku konfiguracyjnego poniżej.git/config
, aby naprawić to, że właśnie otworzyłem.git/config
plik i usunąłem wierszexcludesfile tags
i wszystko wróciło do normy.źródło