Ich hatte das gleiche Problem, dann stellte ich fest, dass ich meine .gitignore-Datei stattdessen auf einem anderen Laufwerk gespeichert hatte: face-palm:
Henry Chan
Es ist eine sehr schlechte Idee, Dinge in Ihrem Repository zu behalten und die Änderungen daran zu ignorieren.
Jewgenij Afanasjew
Antworten:
362
Stellen Sie sicher , dass Ihr .gitignorein der Wurzel des Arbeitsverzeichnis ist, und in diesem Verzeichnis laufen git statusund kopieren Sie den Pfad zur Datei aus dem Statusausgang und fügen Sie ihn in die.gitignore .
Wenn das nicht funktioniert, ist es wahrscheinlich, dass Ihre Datei bereits von Git verfolgt wird. Sie können dies durch die Ausgabe von bestätigen git status. Wenn die Datei nicht im Abschnitt "Nicht verfolgte Dateien" aufgeführt ist, wird sie bereits von Git verfolgt und ignoriert die Regel aus dem.gitignore Datei.
Der Grund, Dateien in Git zu ignorieren, besteht darin, dass sie nicht zum Repository hinzugefügt werden. Wenn Sie zuvor eine Datei hinzugefügt haben, die ignoriert werden soll, wird sie von Git verfolgt und die entsprechenden Übereinstimmungsregeln werden übersprungen. Git tut dies, da die Datei bereits Teil des Repositorys ist.
Um die Datei tatsächlich zu ignorieren, müssen Sie sie entfernen und aus dem Repository entfernen. Sie können dies mit verwenden git rm --cached sites/default/settings.php. Dadurch wird die Datei aus dem Repository entfernt, ohne die Datei physisch zu löschen (das ist, was das --cachedtut). Nach dem Festschreiben dieser Änderung wird die Datei aus dem Repository entfernt, und das Ignorieren sollte ordnungsgemäß funktionieren.
Was meinst du mit 'root des Arbeitsverzeichnisses'? Das Verzeichnis, in dem sich das '.git'-Repository befindet?
Jonathan Leffler
Das Arbeitsverzeichnis ist das Verzeichnis, in dem sich das .gitVerzeichnis befindet und das selbst das Stammverzeichnis des Repositorys ist. Wie , wenn Sie ein Repository klonen , um /xy/dann /xy/ist das Arbeitsverzeichnis mit nach /xy/.git/innen.
stupsen
3
Manchmal müssen Sie auch ein git add .After git rm --cachedausführen, um den Index ordnungsgemäß neu zu erstellen.
Cooper
Die Idee, es im Git-Status zu überprüfen, war brillant. Ich habe es im Git Staging in Eclipse immer wieder überprüft und der Pfad war falsch. Vielen Dank!
Walla
1
Ich musste das Flag -r (rekursiv) hinzufügen, da ich auch verschachtelte Ordner eingecheckt hatte. In meinem Fall bin ich in das Stammverzeichnis meines Git-Ordners verschoben und habe dann den Befehl git rm --cached -r .vs / Where vs ausgeführt, den Ordner der obersten Ebene, den ich aus dem Tracking entfernen wollte.
Devology Ltd
104
Ich stoße darauf, es ist eine alte Frage, aber ich möchte, dass diese Datei verfolgt wird, aber nicht auf bestimmten Arbeitskopien, damit Sie sie ausführen können
Das ist eigentlich die Antwort, nach der ich gesucht habe. Bei allen anderen Antworten wird davon ausgegangen, dass die Datei mit git add hinzugefügt wurde, was nicht immer der Fall ist. Bei Acquia Cloud soll die .gitignore-Datei die Datei settings.php (zum Beispiel) ignorieren, die Datei ist jedoch beim ersten Festschreiben enthalten. Wenn Sie die Datei nicht mehr verfolgen, löschen Sie sie einfach aus dem Repository und damit von der Live-Site ...
PatrickS
Hat mir auch geholfen - danke! Abgestimmt. Ich vermute, obwohl es nur für lokales Git-Repo gilt und nicht bestehen bleibt, wenn es einmal von anderen Entwicklern auf Remote geschoben und geklont wurde.
Ivan
1
Ja, es ist nur lokal.
Mescalito
40
.gitignore ignoriert nur Dateien, die Sie noch nicht zu Ihrem Repository hinzugefügt haben.
Wenn Sie a ausgeführt git add .haben und die Datei zum Index hinzugefügt wurde, hilft Ihnen .gitignore nicht weiter. Sie müssen es tun git rm sites/default/settings.php, um es zu entfernen, und dann wird es ignoriert.
Thanks.but Wie entferne ich die Datei nur aus dem Index und nicht aus dem Arbeitsverzeichnis?
Nick.h
1
git rmsollte dies tun, aber es kann sein, dass Sie aufgefordert werden, die Option -f zu verwenden, die es aus dem Arbeitsverzeichnis entfernen würde. Ich habe dies nur herausgefunden, um eine Kopie der Datei zu erstellen, die Kopie zu erstellen git rm -fund dann wiederherzustellen.
Jonescb
Selber Mann. Erstellen Sie irgendwo eine Kopie, entfernen Sie sie, übernehmen Sie den Status "Entfernen", fügen Sie die Dateien wieder hinzu und sehen Sie, wie sie jetzt ignoriert werden.
Jewgenij Afanasjew
14
Bitte benutzen Sie diesen Befehl
git rm -rf --cached .
git add .
Manchmal funktionieren Gitignore-Dateien nicht, obwohl sie korrekt sind. Der Grund, warum Git Dateien ignoriert, ist, dass sie nicht zum Repository hinzugefügt werden. Wenn Sie eine Datei hinzugefügt haben, die Sie zuvor ignorieren möchten, wird sie von Git verfolgt und alle überspringenden Übereinstimmungsregeln werden übersprungen. Git tut dies, weil die Datei bereits Teil des Repositorys ist.
Ich fühle mich wie ein Noob aus diesem Grund ... verdammt noch mal Windows
Coty Embry
Irgendeine Idee, warum die Dateicodierung wichtig ist? Vielleicht nicht richtig lesen?
Chargnn
2
Was ich getan habe, um die Datei settings.php erfolgreich zu ignorieren :
git rm --cached sites / default / settings.php
Commit (bis hierher hat nicht funktioniert)
manuell gelöschte sites / default / settings.php (das hat den Trick gemacht)
git hinzufügen.
Festschreiben (erfolgreich ignoriert)
Ich denke, wenn es die festgeschriebene Datei auf Git gibt, funktioniert Ignorieren nicht wie erwartet. Löschen Sie einfach die Datei und legen Sie fest. Danach wird es ignoriert.
Es gibt Instanzen, z. B. Anwendungskonfigurationsdateien, die in git verfolgt werden sollen (daher funktioniert .gitignore nicht), die ich jedoch für lokale Einstellungen ändern muss. Ich möchte nicht, dass Git diese Dateien verwaltet oder als geändert anzeigt. Dazu benutze ich skip-worktree:
git update-index --skip-worktree path/to/file
Sie können bestätigen, dass Dateien übersprungen werden, indem Sie Dateien auflisten und nach Zeilen suchen, die mit S beginnen, um übersprungen zu werden
git ls-files -v | grep ^S
Wenn Sie möchten, dass git die Datei in Zukunft erneut lokal verwaltet, führen Sie einfach Folgendes aus:
git update-index --no-skip-worktree path/to/file
Mescalito oben hatte eine tolle Antwort, die mich aber auf den richtigen Weg führte
git update-index --assume-unveränderte Datei / to / ignore.php
Hat einen Vertrag mit git, in dem: der Benutzer verspricht, die Datei nicht zu ändern, und Git davon ausgehen kann, dass die Arbeitsbaumdatei mit den im Index aufgezeichneten übereinstimmt.
Ich ändere jedoch den Inhalt der Dateien, daher ist in meinem Fall --skip-worktree die bessere Option.
Ein weiterer möglicher Grund - einige Instanzen von Git-Clients, die gleichzeitig ausgeführt werden . Zum Beispiel "Git Shell" + "GitHub Desktop" usw.
Dies ist mir passiert, ich habe "GitHub Desktop" als Hauptclient verwendet und einige neue .gitignore-Einstellungen ignoriert: Commit nach Commit:
Sie begehen etwas.
Als nächstes Commit: Es ignoriert die .gitignore-Einstellungen. Commit enthält viele temporäre Dateien, die im .gitignore erwähnt werden.
Git-Cache löschen; Überprüfen Sie, ob .gitignore UTF8 ist. Dateien entfernen -> festschreiben -> Dateien zurück verschieben; 1 Commit überspringen - nichts hat geholfen.
Grund : Der Visual Studio Code-Editor wurde im Hintergrund mit demselben geöffneten Repository ausgeführt. VS Code verfügt über eine integrierte Git-Steuerung, was zu Konflikten führt.
Lösung : Überprüfen Sie mehrere versteckte Git-Clients und verwenden Sie nur einen Git-Client gleichzeitig, insbesondere beim Löschen des Git-Cache.
Stellen Sie sicher, dass der .gitignore keine Erweiterung hat !! Es kann nicht .gitignore.txt sein, in Windows benennen Sie einfach die Datei .gitignore. und es wird funktionieren.
Wo repoalso die oben erwähnte "Wurzel" ist (ich würde sie die Wurzel Ihres Arbeitsbaums nennen) und .gitignorenur enthält sites/default/settings.php, funktioniert das Ignorieren für mich (und es spielt keine Rolle, ob .gitignorees dem Repo hinzugefügt wird oder nicht). Passt das zu Ihrem Repo-Layout? Wenn nicht, was ist anders?
Ja. Es ist genau das gleiche wie bei Ihnen. Funktioniert jedoch nicht. Alle anderen Muster funktionieren. Wie ich bereits sagte, ist das Problem sicherlich relativ zum Ordner settings.php.
Nick.h
Ich halte es für eine sehr schlechte Idee, Dinge in Ihrem Repository zu behalten und die Änderungen daran zu ignorieren.
Jewgenij Afanasjew
@ YevgeniyAfanasyev mit Ausnahme von Dingen wie Kompilierungsausgabe, IDE-Benutzereinstellungen, allen anderen temporären Dateien, die von Ihrer Toolchain generiert wurden…
Chris F Carroll
Ich meinte, im Repository festgeschrieben zu bleiben, nicht nur Dateien, die sich im Projektordner befinden. Warum benötigen Sie temporäre Dateien im Repository?
Jewgenij Afanasjew
0
Nur für den Fall, dass jemand in Zukunft das gleiche Problem hat wie ich:
Wenn Sie die verwenden
*
!/**/
!*.*
Trick, um Binärdateien ohne Erweiterung zu entfernen, stellen Sie sicher, dass alle anderen Gitignore-Zeilen UNTEN sind. Git liest von oben aus .gitignore. Obwohl ich 'test.go' in meinem Gitignore hatte, war es zuerst in der Datei und wurde danach 'unignored'
Antworten:
Stellen Sie sicher , dass Ihr
.gitignore
in der Wurzel des Arbeitsverzeichnis ist, und in diesem Verzeichnis laufengit status
und kopieren Sie den Pfad zur Datei aus dem Statusausgang und fügen Sie ihn in die.gitignore
.Wenn das nicht funktioniert, ist es wahrscheinlich, dass Ihre Datei bereits von Git verfolgt wird. Sie können dies durch die Ausgabe von bestätigen
git status
. Wenn die Datei nicht im Abschnitt "Nicht verfolgte Dateien" aufgeführt ist, wird sie bereits von Git verfolgt und ignoriert die Regel aus dem.gitignore
Datei.Der Grund, Dateien in Git zu ignorieren, besteht darin, dass sie nicht zum Repository hinzugefügt werden. Wenn Sie zuvor eine Datei hinzugefügt haben, die ignoriert werden soll, wird sie von Git verfolgt und die entsprechenden Übereinstimmungsregeln werden übersprungen. Git tut dies, da die Datei bereits Teil des Repositorys ist.
Um die Datei tatsächlich zu ignorieren, müssen Sie sie entfernen und aus dem Repository entfernen. Sie können dies mit verwenden
git rm --cached sites/default/settings.php
. Dadurch wird die Datei aus dem Repository entfernt, ohne die Datei physisch zu löschen (das ist, was das--cached
tut). Nach dem Festschreiben dieser Änderung wird die Datei aus dem Repository entfernt, und das Ignorieren sollte ordnungsgemäß funktionieren.quelle
.git
Verzeichnis befindet und das selbst das Stammverzeichnis des Repositorys ist. Wie , wenn Sie ein Repository klonen , um/xy/
dann/xy/
ist das Arbeitsverzeichnis mit nach/xy/.git/
innen.git add .
Aftergit rm --cached
ausführen, um den Index ordnungsgemäß neu zu erstellen.Ich stoße darauf, es ist eine alte Frage, aber ich möchte, dass diese Datei verfolgt wird, aber nicht auf bestimmten Arbeitskopien, damit Sie sie ausführen können
quelle
.gitignore ignoriert nur Dateien, die Sie noch nicht zu Ihrem Repository hinzugefügt haben.
Wenn Sie a ausgeführt
git add .
haben und die Datei zum Index hinzugefügt wurde, hilft Ihnen .gitignore nicht weiter. Sie müssen es tungit rm sites/default/settings.php
, um es zu entfernen, und dann wird es ignoriert.quelle
git rm
sollte dies tun, aber es kann sein, dass Sie aufgefordert werden, die Option -f zu verwenden, die es aus dem Arbeitsverzeichnis entfernen würde. Ich habe dies nur herausgefunden, um eine Kopie der Datei zu erstellen, die Kopie zu erstellengit rm -f
und dann wiederherzustellen.Bitte benutzen Sie diesen Befehl
Manchmal funktionieren Gitignore-Dateien nicht, obwohl sie korrekt sind. Der Grund, warum Git Dateien ignoriert, ist, dass sie nicht zum Repository hinzugefügt werden. Wenn Sie eine Datei hinzugefügt haben, die Sie zuvor ignorieren möchten, wird sie von Git verfolgt und alle überspringenden Übereinstimmungsregeln werden übersprungen. Git tut dies, weil die Datei bereits Teil des Repositorys ist.
quelle
Ich hatte das gleiche Problem. Dateien, die in definiert sind,
.gitingore
werden beim Ausführen als nicht verfolgte Dateien aufgeführtgit status
.Der Grund war, dass die
.gitignore
Datei inUTF-16LE
Codierung und nicht inUTF8
Codierung gespeichert wurde .Nachdem ich die Kodierung der
.gitignore
Datei geändert hatte,UTF8
funktionierte sie für mich.quelle
Was ich getan habe, um die Datei settings.php erfolgreich zu ignorieren :
Ich denke, wenn es die festgeschriebene Datei auf Git gibt, funktioniert Ignorieren nicht wie erwartet. Löschen Sie einfach die Datei und legen Sie fest. Danach wird es ignoriert.
quelle
Es gibt Instanzen, z. B. Anwendungskonfigurationsdateien, die in git verfolgt werden sollen (daher funktioniert .gitignore nicht), die ich jedoch für lokale Einstellungen ändern muss. Ich möchte nicht, dass Git diese Dateien verwaltet oder als geändert anzeigt. Dazu benutze ich skip-worktree:
Sie können bestätigen, dass Dateien übersprungen werden, indem Sie Dateien auflisten und nach Zeilen suchen, die mit S beginnen, um übersprungen zu werden
Wenn Sie möchten, dass git die Datei in Zukunft erneut lokal verwaltet, führen Sie einfach Folgendes aus:
Mescalito oben hatte eine tolle Antwort, die mich aber auf den richtigen Weg führte
git update-index --assume-unveränderte Datei / to / ignore.php
Hat einen Vertrag mit git, in dem: der Benutzer verspricht, die Datei nicht zu ändern, und Git davon ausgehen kann, dass die Arbeitsbaumdatei mit den im Index aufgezeichneten übereinstimmt.
Ich ändere jedoch den Inhalt der Dateien, daher ist in meinem Fall --skip-worktree die bessere Option.
Die Website von Toshiharu Nishina bot eine hervorragende Erklärung für Skip-Worktree und Unverändert: Ignorieren Sie Dateien, die bereits lokal mit Git verwaltet wurden
quelle
Ein weiterer möglicher Grund - einige Instanzen von Git-Clients, die gleichzeitig ausgeführt werden . Zum Beispiel "Git Shell" + "GitHub Desktop" usw.
Dies ist mir passiert, ich habe "GitHub Desktop" als Hauptclient verwendet und einige neue .gitignore-Einstellungen ignoriert: Commit nach Commit:
Grund : Der Visual Studio Code-Editor wurde im Hintergrund mit demselben geöffneten Repository ausgeführt. VS Code verfügt über eine integrierte Git-Steuerung, was zu Konflikten führt.
Lösung : Überprüfen Sie mehrere versteckte Git-Clients und verwenden Sie nur einen Git-Client gleichzeitig, insbesondere beim Löschen des Git-Cache.
quelle
Stellen Sie sicher, dass der .gitignore keine Erweiterung hat !! Es kann nicht .gitignore.txt sein, in Windows benennen Sie einfach die Datei .gitignore. und es wird funktionieren.
quelle
Ich habe es gerade mit Git 1.7.3.1 versucht und eine Struktur wie folgt angegeben:
Wo
repo
also die oben erwähnte "Wurzel" ist (ich würde sie die Wurzel Ihres Arbeitsbaums nennen) und.gitignore
nur enthältsites/default/settings.php
, funktioniert das Ignorieren für mich (und es spielt keine Rolle, ob.gitignore
es dem Repo hinzugefügt wird oder nicht). Passt das zu Ihrem Repo-Layout? Wenn nicht, was ist anders?quelle
Nur für den Fall, dass jemand in Zukunft das gleiche Problem hat wie ich:
Wenn Sie die verwenden
Trick, um Binärdateien ohne Erweiterung zu entfernen, stellen Sie sicher, dass alle anderen Gitignore-Zeilen UNTEN sind. Git liest von oben aus .gitignore. Obwohl ich 'test.go' in meinem Gitignore hatte, war es zuerst in der Datei und wurde danach 'unignored'
quelle
Ich habe die meisten Befehle oben auf dem VS Code-Terminal ausprobiert und dabei folgende Fehler erhalten:
fatal: pathspec '[dir]/[file]' did not match any files
Ich habe das Projekt auf GitHub Desktop geöffnet und von dort aus ignoriert und es hat funktioniert.
quelle