Wann würden Sie .git / info / exclude anstelle von .gitignore verwenden, um Dateien auszuschließen?

143

Ich bin etwas verwirrt über die Vor- und Nachteile der Verwendung .git/info/excludeund .gitignoredes Ausschlusses von Dateien.

Beide befinden sich auf der Ebene des Repositorys / Projekts. Wie unterscheiden sie sich also und wann sollten wir sie verwenden .git/info/exclude?

Parag
quelle

Antworten:

195

Der Vorteil von .gitignoreist, dass es im Gegensatz zum Repository selbst eingecheckt werden kann .git/info/exclude. Ein weiterer Vorteil ist, dass Sie im .gitignoreGegensatz zu mehreren Verzeichnissen mehrere Dateien haben können, eine in jedem Verzeichnis / Unterverzeichnis für verzeichnisspezifische Ignorierregeln .git/info/exclude.

Ist .gitignorealso für alle Klone des Repositorys verfügbar. Daher ist in großen Teams alle Menschen die gleiche Art von Dateien Beispiel ignorieren *.db, *.log. Und Sie können spezifischere Ignorierregeln haben, weil es mehrere gibt .gitignore.

.git/info/excludeist nur für einzelne Klone verfügbar, daher ist das, was eine Person in ihrem Klon ignoriert, im Klon einer anderen Person nicht verfügbar. Wenn beispielsweise jemand Eclipsefür die Entwicklung verwendet, kann es für diesen Entwickler sinnvoll sein, einen .buildOrdner hinzuzufügen , .git/info/excludeda andere Entwickler Eclipse möglicherweise nicht verwenden.

Im Allgemeinen sollten Dateien / Ignorierregeln, die allgemein ignoriert werden müssen, aufgenommen werden .gitignore, andernfalls sollten Dateien, die Sie nur auf Ihrem lokalen Klon ignorieren möchten, aufgenommen werden.git/info/exclude

mu 無
quelle
Aber das sollte idealerweise in ~ / .gitignore gehen, wie in der offiziellen Dokumentation von Git hier angegeben, git-scm.com/docs/gitignore
Devendra Swami
@ DevendraSwami Ich habe nicht verstanden, auf welchen bestimmten Eintrag ~/.gitignorein Ihrem Kommentar oben eingegangen werden soll . Mein Verständnis ist, dass Ignorierregeln auf drei Ebenen liegen können - $PROJECT/.git/info/excludefür (projekt-, benutzer-) spezifische Ignorierregeln, dh $PROJECT/<any number of directories>/.gitignorefür projektspezifische Ignorierregeln für jeden Benutzer an einem beliebigen Ort (beim Einchecken), ~/.gitignore für benutzerspezifische Ignorierregeln für jedes Projekt für diesen Benutzer auf dieser Maschine. Basierend auf dem Ziel wählen Sie den Ort aus, an dem Sie einen Eintrag
vornehmen möchten
Ja, du hast absolut recht. Mein Kommentar bezog sich auf diese Frage stackoverflow.com/questions/59673991/…
Devendra Swami
Ich entschuldige mich für den ursprünglichen unvollständigen Kommentar.
Devendra Swami
2
@ShimmyWeitzhandler, Ist die SLN-Datei bereits in Ihrem Repo? Dann verhindert exclude oder .ignore nicht, dass git seine Änderungen verfolgt. Versuchen Sie Folgendes: git rm --cached <path-name>Löscht es aus dem Repository, behält es jedoch lokal bei. git update-index --skip-worktree <path-name>Änderungen an der Datei werden ignoriert, aber im Repository gespeichert. Aus Neugier: Warum soll die sln-Datei ausgeschlossen werden? Es ist ein wichtiger Teil einer .Net-Lösung, oder?
Koen
36

Googelt: 3 Möglichkeiten zum Ausschließen von Dateien

  1. .gitignore gilt für jeden Klon dieses Repositorys (versioniert, jeder wird es haben),
  2. .git/info/exclude gilt nur für Ihre lokale Kopie dieses Repositorys (lokal, nicht für andere freigegeben),
  3. ~/.gitignore gilt für alle Repositorys auf Ihrem Computer (lokal, nicht für andere freigegeben).

3. erfordert tatsächlich eine Konfiguration auf Ihrem Computer festzulegen:

git config --global core.excludesfile '~/.gitignore'
LeGEC
quelle
2
Ja, das habe ich auch gelesen, wollte aber eine praktischere (reale) Perspektive bekommen :-)
Parag
Das verlinkte Blog ruft die Datei fälschlicherweise auf .git/info/excludes, wenn dies der Fall sein sollte .git/info/exclude. Dies wird durch die Dokumentation bestätigt, auf die es verweist.
mwfearnley
13
(Spoiler: Der dritte Weg ist computer-globales Ignorieren durch eine Einstellung in ~ / .gitconfig)
hmijail trauert um Rücktritte
@hmijail: Danke, ich habe Ihren Kommentar in diese Antwort aufgenommen
LeGEC
12

Nur um unsere (reale) Erfahrung zu bieten: Wir haben mit der Verwendung von .git / info / exclude begonnen, als wir einige Konfigurationsdateien in jeder Entwicklungsumgebung anpassen mussten, aber dennoch wollten, dass die Quelle im Repo beibehalten und anderen Entwicklern zur Verfügung steht.

Auf diese Weise können die lokalen Dateien, sobald sie geklont und geändert wurden, von Commits ausgeschlossen werden, ohne die Originaldateien im Repo zu beeinträchtigen, ohne jedoch im Repo unbedingt ignoriert zu werden.

Effing
quelle
4

Verwenden Sie .gitignorefür die Regeln ignorieren , die spezifisch für das sind Projekt . Verwenden Sie excludeoder eine globale Ignorierdatei, um Regeln zu ignorieren, die für Ihre Umgebung spezifisch sind .

Beispielsweise ignorieren meine globalen Ignorierdateien die temporären Dateien, die von dem von mir verwendeten Editor generiert wurden. Diese Regel ist spezifisch für meine Umgebung und kann für andere Entwickler im selben Projekt unterschiedlich sein (möglicherweise verwenden sie einen anderen Editor). OTOH, meine Projektdateien .gitignoreignorieren Dinge wie API-Schlüssel und Build-Artefakte - diese sind für das Projekt und sollten für alle im Projekt gleich sein.

Hilft das?

Marnen Laibow-Koser
quelle