Git global ignorieren funktioniert nicht

82

Ich habe die Datei erstellt .gitignore_globalund in mein Git-Installationsverzeichnis gestellt. Wenn ich den Befehl ausführe:

git config --global core.excludesfile ~/.gitignore

Die Regeln in der Ignorierdatei werden nicht auf meine Commits angewendet.

Wenn ich die Datei umbenenne .gitignoreund in mein Projektstammverzeichnis lege, gelten die Regeln.

Was ist hier falsch?

user880954
quelle
@Jarrod `~ / .gitignore_global` war das, was das OP bedeutete und nur ein Tippfehler in der Post, obwohl er meine Antwort akzeptierte, so dass Ihre Bearbeitung nicht gut ist
CharlesB

Antworten:

164

Vielleicht müssen Sie Folgendes tun:

git config --global core.excludesfile ~/.gitignore_global 

Und um Kaffee zu trinken.

CharlesB
quelle
Entschuldigung, das habe ich gemeint. Der, den ich kopiert habe, hat nur herumgespielt, um zu sehen, was funktioniert.
user880954
Richtig für Kaffee und Zähne. Sind Sie sicher, dass .gitignore_global in Ihrem $ HOME ist? Sie sagen, Sie haben es im Git-Installationsverzeichnis installiert?
CharlesB
Irgendeine Idee, warum es hier immer noch nicht funktioniert? Ich habe eine .7z-Datei, die ich überspringen möchte. Ich habe diese Regeln hinzugefügt: gist.github.com/octocat/9257657 ; und nachdem ich die Datei geändert habe, wird sie immer noch auf .git :(
Aquarius Power
2
Ja, gitignoreDatei funktioniert nur für nicht verfolgte Dateien, nicht für diejenigen, die zuvor hinzugefügt wurden
CharlesB
1
Eine andere Sache, die mir gerade aufgefallen ist, war, dass das Zeilenmuster in der .gitignore_global-Datei genau mit dem Pfad aus dem Hauptverzeichnis des Projekts übereinstimmen muss. Wenn der Projektname beispielsweise myProject lautet und SQL-Code in myProject / sql / init generiert und Sie myProject / sql / init / *. Sql ignorieren möchten, muss der Eintrag * / sql / init / sein. In ähnlicher Weise müssen für generierten DAO / DTO-Code in myProject / msg / dao / und myProject / dao zwei Einträge vorhanden sein, um ALLE Dateien in den Unterverzeichnissen von dao abzufangen - * / * / dao / und * / dao / müssen hinzugefügt werden.
Keith Kibler
79

Ich dachte, ich würde mich darauf einlassen. Es gibt noch einen weiteren Grund, warum die globale Ignorierdatei anscheinend nicht funktioniert. Ich glaube nicht, dass dies in früheren Antworten behandelt wurde. Es ist so offensichtlich, dass es natürlich sehr leicht zu übersehen ist.

Es ist so, dass Git nur neue Dateien ignoriert . Wenn die Datei bereits von git verfolgt wird, wird sie von git natürlich nicht ignoriert! Welche Muster in einer gitignoreoder einer excludeDatei auch immer nicht zutreffen .

Das macht Sinn. Warum sollte Git Änderungen an Dateien ignorieren wollen, die es bereits verfolgt? Wenn die Datei ignoriert werden soll, müssen Sie git zuerst anweisen, sie nicht zu verfolgen, und dann git ignorieren, wie im Handbuch beschrieben. Informationen zum Aufheben der Verfolgung von Dateien finden Sie in dieser Antwort .

Dies alles führt mich zu der Frage, ob es möglich ist, Änderungen an verfolgten Dateien zu ignorieren. Wieder liefert Git. Diese Antwort; Git: Verfolgen von verfolgten Dateien gibt uns den Befehl (durch filedie Datei ersetzen, die Sie ignorieren möchten):

git update-index --assume-unchanged file

Zum Schluss noch ein paar zusätzliche Informationen zum Debuggen von Git Ignorieren.

Die gitignore (5) Handbuchseite sagt uns:

Muster, die ein Benutzer in allen Situationen von Git ignorieren lassen soll (z. B. Sicherungs- oder temporäre Dateien, die vom Editor des Benutzers der Wahl generiert wurden), werden im Allgemeinen in eine Datei eingefügt, die von core.excludesfile in der ~ / .gitconfig des Benutzers angegeben wird. Der Standardwert ist $ XDG_CONFIG_HOME / git / ignore. Wenn $ XDG_CONFIG_HOME entweder nicht gesetzt oder leer ist, wird stattdessen $ HOME / .config / git / ignore verwendet.

Das ist also neu und ersetzt das vorherige ~/.gitignore_global erwähnten.

Als nächstes, und das ist wirklich nützlich, haben wir ab 1.8.2 einige ausgezeichnete Debugging-Tools. Schauen Sie sich an:

Git lernt besser zu ignorieren - Neu in 1.8.2

Dies zeigt, wie Sie mit dem neuen check-ignoreFlag überprüfen können, ob git Ihre Muster erfolgreich ignoriert, z

git check-ignore bin/a.dll --verbose

Max MacLeod
quelle
7
git update-index --assume-unchanged filewar genau das, wonach ich gesucht habe, danke!
Jai
13

Ich fand das, als ich das Folgende definiert hatte global core.excludesfile:

git config --global core.excludesfile $HOME/.config/git/ignore

es hat nicht funktioniert. Ändern Sie es so, dass die $HOMEVariable nicht wie folgt verwendet wird:

git config --global core.excludesfile ~/.config/git/ignore

es fing sofort an zu arbeiten. Hoffe das hilft jemand anderem.

Zu Ihrer Information:

$ git --version
git version 1.7.10.2 (Apple Git-33)
XP84
quelle
Ich habe das auch beobachtet. Ich habe die Dokumentation überflogen, aber nichts gefunden: Zusätzlich zu .gitignore (pro Verzeichnis) und .git / info / exclude sucht git in dieser Datei nach Mustern von Dateien, die nicht verfolgt werden sollen. "~ /" wird auf den Wert von $ HOME und "~ user /" auf das Home-Verzeichnis des angegebenen Benutzers erweitert.
Rliu
8

Hinweis: ab git1.7.12 (August 2012) :

Der Wert von:

  • core.attributesfile Der Standardwert ist $ HOME / .config / git / Attribute und
  • core.excludesfileDer Standardwert ist $HOME/.config/git/ignorejeweils, wenn diese Dateien vorhanden sind.

Wenn Sie also eine $HOME/.config/git/attributesDatei erstellen , müssen Sie nicht einmal Ihre core.excludesfileEinstellungen vornehmen.

VonC
quelle
4

Die Datei muss sich in Ihrem Home-Verzeichnis befinden. Unter Windows bedeutet dies normalerweise: C: \ Dokumente und Einstellungen \ [Benutzer].

Unter Linux ist es: / home / [Benutzer]

Leandro Casanova
quelle
2

Ich hatte dieses Problem, weil ich ursprünglich 'git config core.excludefiles' ohne --global und mit einem falschen Wert aufgerufen hatte und daher die Eigenschaft lokal gespeichert hatte. Es sieht so aus, als hätte die lokale Eigenschaft die globale Eigenschaft (die den richtigen Wert hatte) versteckt und sie vollständig ignoriert.

Daniel Pinyol
quelle
2

Ein weiterer Grund, warum ein globales Git-Ignorieren möglicherweise nicht funktioniert: unsichtbare Zeichen im Pfad.

Ich fand nur heraus, dass dies mein Problem war, als ich die Warnmeldung von git-check-ignore in die Adressleiste von Chrome einfügte, wo sie zum Glück sichtbar wurde:

Geben Sie hier die Bildbeschreibung ein

(Es war auf dem Terminal nicht sichtbar. Und dies könnte ein langes Kaninchenloch zum Debuggen gewesen sein ... 😅)

1j01
quelle
1

Ich hatte das gleiche Problem (unter Windows). Am Ende überprüfte ich meine ~/.gitconfigDatei und stellte fest, dass meine auf excludesfileFolgendes eingestellt war:

excludesfile = C:\\Users\\myUserName\\Documents\\gitignore_global.txt

aber es hätte sein sollen:

excludesfile = C:\\Users\\myUserName\\.gitignore_global

Nachdem ich es geändert hatte, funktionierte alles so, wie es sollte.

Bob
quelle
1

Außerdem hatte ich eine lustige Sache mit der Codierung dieser Datei. Irgendwie hat mein Windows 10 (mit Powershell) die Datei mit der Codierung "UTF-16 LE" erstellt und irgendwie konnte Git damit nicht umgehen. Wenn ich die Codierung auf einen viel vernünftigeren Wert von buchstäblich allem anderen ändere, hat es funktioniert.

Wolfgang Stelzhammer
quelle
0

Ein weiterer schwer nachvollziehbarer Grund, warum .gitignore (_global) nicht funktioniert, könnten führende Leerzeichen in den Zeilen sein. Die Datei verzeiht keine führenden Leerzeichen. Stellen Sie also sicher, dass jede Zeile Ihrer Datei keine enthält, es sei denn, es handelt sich um eine leere Zeile. Ich brauchte eine Weile, um es herauszufinden.

Ich füge nur meine zwei Cent hinzu.

luanjunyi
quelle
0

Ich habe kürzlich einen Fehler gemacht und den folgenden Befehl ausgeführt. git config core.excludesfile tags Dadurch wurde der Ausschlussdateipfad in eine lokale Datei im aktuellen Repository geändert. Diese Konfiguration wurde in die lokale Konfigurationsdatei unter geschrieben .git/config, um zu beheben, dass ich die .git/configDatei gerade geöffnet und die Zeile gelöscht habe excludesfile tagsund alles ist wieder normal.

Nafaa Boutefer
quelle