So ignorieren Sie bestimmte Dateien in Git

731

Ich habe ein Repository mit einer Datei Hello.java. Wenn ich es kompiliere, wird eine zusätzliche Hello.classDatei generiert.

Ich habe einen Eintrag für Hello.classin einer .gitignoreDatei erstellt. Die Datei scheint jedoch weiterhin verfolgt zu werden.

Wie kann ich Git ignorieren lassen Hello.class?

Kohan95
quelle
8
Was meinst du mit "es funktioniert nicht"? Haben Sie Hello.class vielleicht bereits zu Ihrem Repository hinzugefügt? Gitignores haben keine Auswirkung auf Inhalte, die bereits verfolgt wurden. Siehe zum Beispiel stackoverflow.com/questions/1139762/gitignore-file-not-ignoring
Cascabel

Antworten:

809

Das Problem ist, dass .gitignorenur Dateien ignoriert werden, die zuvor (von git add) nicht verfolgt wurden . Laufen Sie git reset name_of_file, um die Datei zu entfernen und zu behalten. Wenn Sie die angegebene Datei auch aus dem Repository entfernen möchten (nach dem Push), verwenden Sie git rm --cached name_of_file.

Ondrej Slinták
quelle
190
Der Befehl git rm --cached name_of_fileentfernt die Datei aus Ihrem Git-Repo. Auch wenn Sie es Ihrer .gitignore-Datei hinzufügen. Das ignoriert nicht, dass gelöscht wird.
OrwellHindenberg
4
Welches scheint das zu sein, was OP in diesem Fall wollte.
Ondrej Slinták
40
Ich bin froh, dass Ihre Lösung für @ Kohan95 funktioniert hat! Diese Frage sollte jedoch basierend auf der ausgewählten Antwort umbenannt werden. Meine Kommentare sind nur eine Warnung für Entwickler, die möglicherweise nicht wissen, was der Befehl tut.
OrwellHindenberg
91
git reset name_of_fileEntfernt das Tracking und löscht die Datei nicht.
Cees Timmerman
7
Versucht git rm --cached <Name_der_Datei> Die Datei im Repo wurde zwar gelöscht, aber da sie sich in der .gitignore-Datei befand, wurde die lokale Kopie nicht gelöscht. Um ein Verzeichnis hinzuzufügen, müssen Sie es mit einem abschließenden Schrägstrich '/' einfügen. Ich habe Rubymines Konfigurationsverzeichnis in einem Ruby-Projekt entfernt, das jemand eingecheckt hatte, nämlich ".idea". In die Datei habe ich ".idea /" und dann "git rm --cached -r .idea" eingefügt, um das Verzeichnis und alles darunter zu entfernen (weil git nur Versionsdateien, keine Verzeichnisse.)
Doug Noel
222

So ignorieren Sie neue Dateien

Global

Fügen Sie die Pfade zu Ihren Dateien hinzu, die Sie in Ihrer .gitignoreDatei ignorieren möchten (und legen Sie sie fest). Diese Dateieinträge gelten auch für andere, die das Repository auschecken.

Örtlich

Fügen Sie die Pfade zu Ihren Dateien hinzu, die Sie zu Ihrer .git/info/excludeDatei ignorieren möchten . Diese Dateieinträge gelten nur für Ihre lokale Arbeitskopie.

So ignorieren Sie geänderte Dateien (vorübergehend)

Um zu ignorieren, dass geänderte Dateien als geändert aufgelistet werden, können Sie den folgenden git-Befehl verwenden:

git update-index --assume-unchanged <file>

Verwenden Sie den folgenden Befehl, um diese Unwissenheit rückgängig zu machen:

git update-index --no-assume-unchanged <file>
Xman Klassik
quelle
Perfekt, um zu verhindern, dass eine Datei mit einem aktuellen API-Schlüssel in Github verschoben wird!
Jim in Texas
1
@ Xman Warum hast du gesagt, es ist vorübergehend? Ich habe die Schritte ausgeführt, die Sie für localgit ignoriert haben, und mein System neu gestartet. Es zeigt immer noch, dass es direkt sauber funktioniert.
Vivek Vardhan
1
Vielen Dank für den nützlichen update-indexTrick, der absolut perfekt ist, um das Ändern einer .gitignoreDatei zu vermeiden , die dann von Git verfolgt wird!
Thomas P.
@mcbjam Es gibt keinen speziellen Befehl zum Ignorieren von Git. Bearbeiten Sie eine Gitignore-Datei an der entsprechenden Stelle in der Arbeitskopie. Sie sollten dann diesen .gitignore hinzufügen und festschreiben. Jeder, der dieses Repo klont, wird diese Dateien ignorieren.
Xman Classical
@Vivek Vardhan git update-index --assume-unverändert ist wie eine temporäre Maske im Index. Es bleibt in Kraft, bis Sie es ausschalten. Um meinen Standpunkt möglicherweise klarer zu machen, enthält der Index anfangs (dh direkt nach dem Git-Lesebaum) alle Dateien aus dem Baum, der gerade eingelesen wurde. Daher wird Git "ein Auge zudrücken" Ein Indexeintrag entspricht nicht dem tatsächlichen Entfernen.
Xman Classical
150

Fügen Sie .gitignore die folgende Zeile hinzu:

/Hello.class

Dadurch wird Hello.class von git ausgeschlossen. Wenn Sie es bereits festgeschrieben haben, führen Sie den folgenden Befehl aus:

git rm Hello.class

Wenn Sie alle Klassendateien von git ausschließen möchten, fügen Sie .gitignore die folgende Zeile hinzu:

*.class
Armand
quelle
32
Durch Hinzufügen Hello.classzu .gitignorewerden alle Hello.classin einem Unterverzeichnis aufgerufenen Dateien ignoriert . Wenn Sie nur die Datei Hello.classim selben Verzeichnis wie die .gitignoreDatei ignorieren möchten, verwenden Sie /Hello.classstattdessen eine Zeile.
Ndim
Wo legen Sie die .gitignoreDatei ab?
CodyBugstein
6
@Imray können Sie .gitignorean einer beliebigen Stelle in ein Git-Projekt einfügen. Wenn ein Pfad mit beginnt /, ist er relativ zum Speicherort der .gitignoreDatei. Andernfalls wird rekursiv auf Dateien im aktuellen Verzeichnis und seinen untergeordneten Verzeichnissen verwiesen.
Armand
109

1) Erstellen Sie eine .gitignoreDatei. Dazu erstellen Sie einfach eine .txtDatei und ändern die Erweiterung wie folgt:

Geben Sie hier die Bildbeschreibung ein

Dann müssen Sie den Namen ändern und die folgende Zeile in ein cmd-Fenster schreiben:

 rename git.txt .gitignore

Wo git.txtist der Name der Datei, die Sie gerade erstellt haben?

Anschließend können Sie die Datei öffnen und alle Dateien, die Sie nicht hinzufügen möchten, in das Repository schreiben. Zum Beispiel sieht meine so aus:

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

Sobald Sie dies haben, müssen Sie es Ihrem Git-Repository hinzufügen. Sie müssen die Datei speichern, in der sich Ihr Repository befindet.

Dann müssen Sie in Git Bash die folgende Zeile schreiben:

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

Wenn das Repository bereits vorhanden ist, müssen Sie Folgendes tun:

  1. git rm -r --cached .
  2. git add .
  3. git commit -m ".gitignore is now working"

Wenn Schritt 2 nicht funktioniert, sollten Sie die gesamte Route der Dateien schreiben, die Sie hinzufügen möchten.

SomeAnonymousPerson
quelle
Sie können den Befehl "copy con .gitignore" in der Eingabeaufforderung verwenden und dann STRG + Z drücken, um die Datei direkt ohne Windows Explorer zu erstellen.
Heringer
61

Ignorieren:

git update-index --assume-unchanged <path/to/file>

So ignorieren Sie:

git update-index --no-assume-unchanged <path/to/file>
avj
quelle
6
Ich möchte, dass dies als Lösung für das Problem ganz oben auf der Tabelle steht ... Es ist sehr einfach und elegant
user1457958
"Es ist sehr einfach und elegant" - nicht wirklich : 'Angenommen, unverändert sollte nicht für einen Ignoriermechanismus missbraucht werden. Es ist "Ich weiß, dass meine Dateisystemoperationen langsam sind. Ich verspreche Git, dass ich diese Pfade nicht ändern werde ..." Insbesondere ist es kein Versprechen ... dass Git immer davon ausgeht, dass diese Pfade unverändert sind - wenn Git einen Pfad bestimmen kann ... hat sich ohne anfallenden zusätzlichen geändert lstat(2)Kosten behält sich das Recht zu berichten , dass der Pfad wurde geändert (... git commit -aist frei , dass der Wandel zu begehen).‘
Chris
47

Sie können die folgenden Methoden verwenden, um Änderungen in nachverfolgten Dateien zu ignorieren / nicht zu ignorieren.

  1. Zum Ignorieren: git update-index --assume-unchanged <file>
  2. Zum Zurücksetzen ignorierter Dateien: git update-index --no-assume-unchanged <file>
kapillohakare
quelle
4
Gilt das für alle Dateien? Es ist unklar, wie diese Befehle auf nur eine einzelne Datei angewendet werden können, um sie zu ignorieren / aufzuheben.
Javadba
@kapil endlich !! etwas, das tatsächlich unter einer Billion Git-Befehlsvarianten funktioniert! Versuchte jede Antwort, einige dumme build.xml-Dateien zu ignorieren, die nach jedem Build immer wieder auftauchten ... danke!
Killjoy
1
Bitte nicht : 'Angenommen, unverändert sollte nicht für einen Ignoriermechanismus missbraucht werden. Es ist "Ich weiß, dass meine Dateisystemoperationen langsam sind. Ich verspreche Git, dass ich diese Pfade nicht ändern werde ..." Insbesondere ist es kein Versprechen ... dass Git immer davon ausgeht, dass diese Pfade unverändert sind - wenn Git einen Pfad bestimmen kann ... hat sich ohne anfallenden zusätzlichen geändert lstat(2)Kosten behält sich das Recht zu berichten , dass der Pfad wurde geändert (... git commit -aist frei , dass der Wandel zu begehen).‘
Chris
22

Erstellen Sie eine .gitignorein dem Verzeichnis, in dem sich .git befindet. Sie können Dateien darin durch einen Zeilenumbruch getrennt auflisten. Sie können auch Platzhalter verwenden:

*.o
.*.swp
Ende
quelle
3
Es wird empfohlen, zu vermeiden, dass werkzeugspezifische Muster (dh Ihre temporären Vim-Dateien) in .gitignoreDateien eingefügt werden (es sei denn, dieses Werkzeug wird vom Projekt vorgeschrieben). Sie können Muster für Ihre bevorzugten Werkzeuge in die Datei (Set core.excludesFile) für Benutzer pro Benutzer einfügen . Sie funktionieren in allen Repositorys. ZB git config --global core.excludesFile "$HOME/.git-user-excludes"dann legen Sie sie in diese Datei.
Chris Johnsen
@ Chris: Danke für den Tipp. Aber ich habe es gerade dort geschrieben, weil mir nichts Besseres in den Sinn gekommen ist :)
Terminus
1
@ChrisJohnsen 'Tool spezifisch?' für vim ?? Ich denke, es ist sicher, vim Swap-Dateien auszuschließen ..
Javadba
16

Von der offiziellen GitHub-Seite:

Wenn Sie bereits eine Datei eingecheckt haben und diese ignorieren möchten, ignoriert Git die Datei nicht, wenn Sie später eine Regel hinzufügen. In diesen Fällen müssen Sie zuerst die Datei entfernen, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:

git rm --cached FILENAME

oder

git rm --cached .
Meile Mijatović
quelle
12

Du solltest so etwas schreiben

*.class

in Ihre .gitignoreDatei.

KingCrunch
quelle
4
@AgentZebra Sie sollten einen Eintrag *.classzu Ihrem hinzufügen .gitignore, damit git alle Dateien ignoriert, die auf enden .class.
KingCrunch
7

Fügen Sie der Datei hinzu, welche Dateien Sie ignorieren möchten .gitignore:

*.Klasse

* .projects

* .prefs

*.Projekt

Chinmoy
quelle
5

Wenn Sie die Datei bereits festgeschrieben haben und versuchen, sie durch Hinzufügen zur .gitignoreDatei zu ignorieren, wird sie von Git nicht ignoriert. Dafür müssen Sie zuerst die folgenden Dinge tun:

git rm --cached FILENAME

Wenn Sie das Projekt neu starten und einige Dateien zu Git Ignorieren hinzufügen möchten, führen Sie die folgenden Schritte aus, um eine Git-Ignorierdatei zu erstellen:

  1. Navigieren Sie zu Ihrem Git-Repository.
  2. Geben Sie "touch .gitignore" ein, um eine .gitignoreDatei zu erstellen .
Savyasachi
quelle
3

Sie können auch .gitattributes (anstelle von .gitignore) verwenden, um ganze Dateitypen auszuschließen. Die Datei ist ziemlich selbsterklärend, aber ich füge den Inhalt hier als Referenz ein. Achten Sie auf die letzte Zeile (* .class binary):

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.mo binary
*.pdf binary
*.phar binary
*.class binary
David Niki
quelle
2

Fügen Sie die folgende Zeile zu .git / info / exclude hinzu:
Hello.class

Dado
quelle
Solltest du Dateien im Ordner ändern .git?
Peter Mortensen
Vielleicht ist es keine gute Idee, diese Dateien unter .git manuell zu berühren.
mgyky
2

Diese Webseite kann nützlich und zeitsparend sein, wenn Sie mit arbeiten .gitignore.

Es generiert automatisch Gitignore-Dateien für verschiedene IDEs und Betriebssysteme mit den spezifischen Dateien / Ordnern, die Sie normalerweise nicht in Ihr Git-Repository ziehen möchten (z. B. IDE-spezifische Ordner und Konfigurationsdateien).

Jaime Caffarel
quelle
1

Ich habe es versucht -

  1. Listen Sie Dateien auf, die wir ignorieren möchten

git status .idea/xyz.xml .idea/pqr.iml Output .DS_Store

  1. Kopieren Sie den Inhalt von Schritt 1 und hängen Sie ihn in die .gitignore-Datei an.

echo " .idea/xyz.xml .idea/pqr.iml Output .DS_Store" >> .gitignore

  1. Bestätigen

git status .gitignore

Ebenso können wir das Verzeichnis und alle seine Unterverzeichnisse / Dateien hinzufügen, die wir im Git-Status ignorieren möchten, directoryname/*und ich habe diesen Befehl aus dem srcVerzeichnis ausgeführt.

VIPIN KUMAR
quelle
1
  1. Gehen Sie zur .gitignore-Datei und fügen Sie den Eintrag für die Dateien hinzu, die Sie ignorieren möchten
  2. Lauf git rm -r --cached .
  3. Jetzt renn git add .
Rahul Garg
quelle
0

Ich habe das ausprobiert --assume-unchangedund auch das hat .gitignoreaber auch nicht gut funktioniert. Sie machen es schwierig, Zweige zu wechseln und Änderungen von anderen zusammenzuführen. Das ist meine Lösung:

Wenn ich begehen , manuell ich die Dateien aus der Liste entfernen Änderungen

Bevor ich ziehe , verstecke ich die geänderten Dateien. Und nach dem Ziehen mache ich einen Stash Pop .

  1. git stash
  2. Git Pull
  3. Git Stash Pop

Schritt 3 löst manchmal eine Zusammenführung aus und kann zu Konflikten führen, die Sie lösen müssen. Dies ist eine gute Sache.

Auf diese Weise kann ich lokale Änderungen beibehalten, die nicht mit anderen im Team geteilt werden.

John Henckel
quelle