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
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
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?
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.
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.
~/.gitignore
in Ihrem Kommentar oben eingegangen werden soll . Mein Verständnis ist, dass Ignorierregeln auf drei Ebenen liegen können -$PROJECT/.git/info/exclude
für (projekt-, benutzer-) spezifische Ignorierregeln, dh$PROJECT/<any number of directories>/.gitignore
fü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 Eintraggit 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?Googelt: 3 Möglichkeiten zum Ausschließen von Dateien
.gitignore
gilt für jeden Klon dieses Repositorys (versioniert, jeder wird es haben),.git/info/exclude
gilt nur für Ihre lokale Kopie dieses Repositorys (lokal, nicht für andere freigegeben),~/.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:quelle
.git/info/excludes
, wenn dies der Fall sein sollte.git/info/exclude
. Dies wird durch die Dokumentation bestätigt, auf die es verweist.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.
quelle
Verwenden Sie
.gitignore
für die Regeln ignorieren , die spezifisch für das sind Projekt . Verwenden Sieexclude
oder 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
.gitignore
ignorieren 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?
quelle