Entfernen Sie einen Ordner aus dem Git-Tracking


404

Ich muss einen Ordner (Namens-Uploads) vom Tracking ausschließen. Ich habe versucht zu rennen

git rm -r --cached wordpress/wp-content/uploads

und danach habe ich den Pfad zu .gitignore hinzugefügt

/wordpress/wp-content/uploads

aber wenn ich lief, werden git statussie als gelöscht angezeigt. Wenn ich versuche, die Änderungen zu übernehmen, werden die Dateien gelöscht und nicht nur aus der Nachverfolgung entfernt.

Was mache ich falsch?

Ich habe es auch versucht

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

Dies scheint jedoch nur Dateien zu entfernen. Ich muss jedoch einen ganzen Ordner (einschließlich Unterordner) aus der Verfolgung entfernen.


Gelöscht bedeutet nicht, dass Git Ihre Dateien löschen wird. Wenn Sie jedoch verwenden reset --hard, wird es.
Keltar

2
Wie @keltar erwähnt, werden Ihre Dateien beim Festschreiben nicht gelöscht. Sie werden von Git gelöscht , aber Ihre Arbeitskopie enthält sie weiterhin. Aber wenn man pulldie woanders diese Dateien begehen werden von dem neuen System gelöscht.
Chris

Antworten:


867

Ich bin auf diese Frage gestoßen, als ich nach "git Ordner aus Tracking entfernen" gegoogelt habe. Die Frage des OP führte mich zur Antwort. Ich fasse es hier für zukünftige Generationen zusammen.

Frage

Wie entferne ich einen Ordner aus meinem Git-Repository, ohne ihn von meinem lokalen Computer (dh der Entwicklungsumgebung) zu löschen?

Antworten

Schritt 1. Fügen Sie den Ordnerpfad zur Stammdatei Ihres Repos hinzu .gitignore.

path_to_your_folder/

Schritt 2. Entfernen Sie den Ordner aus Ihrem lokalen Git-Tracking, aber behalten Sie ihn auf Ihrer Festplatte.

git rm -r --cached path_to_your_folder/

Schritt 3. Übertragen Sie Ihre Änderungen auf Ihr Git-Repo.

Der Ordner wird aus Git-Sicht als "gelöscht" betrachtet (dh er befindet sich in der Vergangenheit, aber nicht im letzten Commit, und Personen, die aus diesem Repo ziehen, erhalten die Dateien aus ihren Bäumen entfernt), bleiben jedoch in Ihrem Arbeitsverzeichnis weil du benutzt hast --cached.


2
Kurze Frage, muss der Ordnerpfad der vollständige Pfad sein? oder nur der Pfad mit dem Git-Repository als Basis?
HMSCelestia

Ich glaube, es ist der volle Weg, aber ich erinnere mich nicht sicher.
Tod Birdsall

7
"Und Leute, die aus diesem Repo ziehen, werden die Dateien von ihren Bäumen entfernen." Kann ich das verhindern?
Leo Gasparrini

Dadurch wurden meine Dateien korrekt aus der Verfolgung in einem Zweig entfernt, aber nach einer Zusammenführung gelöscht!
Harold

1
für mich bleibt noch. Außerdem - sollte ich beim Festschreiben die Auswahl der Dateien aufheben, die sich im Ordner befinden? Ich habe es in beide Richtungen versucht. Wenn die Auswahl aufgehoben wird, kann kein Push ausgeführt werden, aber dann habe ich ein Zeichen in einer anderen Datei geändert, die verfolgt werden soll.
Hilft

44

Das funktioniert bei mir:

git rm -r --cached --ignore-unmatch folder_name

--ignore-unmatch ist hier wichtig, ohne diese Option wird git mit einem Fehler in der ersten Datei beendet, die nicht im Index enthalten ist.


unknown option 'ignore unmatched'
Inigo

Dies ist ein wichtiges Flag, wenn das Verzeichnis leer ist. Danke!
MNN

Sehr nützlich, wenn Sie nur bestimmte Dateierweiterungen aus einem Verzeichnis entfernen möchten:git rm -r --cached --ignore-unmatch .idea/*.xml
takanuva15


8

Ich weiß, dass dies ein alter Thread ist, aber ich wollte nur ein wenig hinzufügen, da die markierte Lösung das Problem für mich nicht gelöst hat (obwohl ich es oft versucht habe).

Die einzige Möglichkeit, die Verfolgung des Ordners durch Git-Formulare zu stoppen, bestand darin, Folgendes zu tun:

  1. Erstellen Sie eine Sicherungskopie des lokalen Ordners und bewahren Sie diese an einem sicheren Ort auf.
  2. Löschen Sie den Ordner aus Ihrem lokalen Repo
  3. Stellen Sie sicher, dass der Cache geleert ist git rm -r --cached your_folder/
  4. In your_folder/.gitignore
  5. Änderungen festschreiben
  6. Fügen Sie das Backup wieder Ihrem Repo hinzu

Sie sollten jetzt sehen, dass der Ordner nicht mehr verfolgt wird.

Fragen Sie mich nicht, warum das Löschen des Caches bei mir nicht funktioniert hat. Ich bin kein Git-Super-Assistent, aber so habe ich das Problem gelöst.


Vielen Dank!!! Git hat mich verrückt gemacht, ohne den Eclipse-Metadatenordner zu ignorieren. Befolgen Sie Ihre Schritte mit dem Ordner "Eclipse .metadata", und es hat endlich funktioniert.
MasterN8

5

Aus der Git-Dokumentation:

Eine weitere nützliche Sache, die Sie möglicherweise tun möchten, ist, die Datei in Ihrem Arbeitsbaum zu belassen, sie jedoch aus Ihrem Staging-Bereich zu entfernen. Mit anderen Worten, Sie möchten die Datei möglicherweise auf Ihrer Festplatte behalten, aber Git lässt sie nicht mehr verfolgen. Dies ist besonders nützlich, wenn Sie vergessen haben, Ihrer .gitignore-Datei etwas hinzuzufügen und diese versehentlich bereitgestellt haben, z. B. eine große Protokolldatei oder eine Reihe kompilierter .a-Dateien. Verwenden Sie dazu die Option --cached:

$ git rm --cached readme.txt

Also vielleicht nicht das "-r" einschließen?


1
Das OP hat es bereits versucht --cached. Die -rOption ist für "rekursiv", was in dieser Instanz enthalten sein sollte.
Chris

Ich fand das nützlich. Ich habe nach einer Vorgehensweise in einem Ordner gesucht und dann nach einer Vorgehensweise in einer Datei gesucht. Ich markiere diesen Kommentar.
Licht
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.