Ich habe die folgende Zeile hinzugefügt .gitignore
:
sites/default/settings.php
aber wenn ich git status
tippe, wird die Datei als nicht bereitgestellte Datei angezeigt.
Was ist das Problem? Alle anderen Muster funktionieren gut.
Ich habe die folgende Zeile hinzugefügt .gitignore
:
sites/default/settings.php
aber wenn ich git status
tippe, wird die Datei als nicht bereitgestellte Datei angezeigt.
Was ist das Problem? Alle anderen Muster funktionieren gut.
Antworten:
Stellen Sie sicher , dass Ihr .gitignore
in der Wurzel des Arbeitsverzeichnis ist, und in diesem Verzeichnis laufen git 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.
.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 .
After git 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
git update-index --assume-unchanged sites/default/settings.php
.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.
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 erstellen git rm -f
und dann wiederherzustellen.
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 hatte das gleiche Problem. Dateien, die in definiert sind, .gitingore
werden beim Ausführen als nicht verfolgte Dateien aufgeführt git status
.
Der Grund war, dass die .gitignore
Datei in UTF-16LE
Codierung und nicht in UTF8
Codierung gespeichert wurde .
Nachdem ich die Kodierung der .gitignore
Datei geändert hatte, UTF8
funktionierte sie für mich.
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.
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.
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
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.
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.
Ich habe es gerade mit Git 1.7.3.1 versucht und eine Struktur wie folgt angegeben:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
Wo repo
also die oben erwähnte "Wurzel" ist (ich würde sie die Wurzel Ihres Arbeitsbaums nennen) und .gitignore
nur enthält sites/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?
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'
!*.*
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.