722 Stimmen

Entfernen Sie einen Ordner aus dem Git-Tracking

Ich muss einen Ordner (namens uploads) vom Tracking ausschließen. Ich habe versucht, folgendes auszuführen

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

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

/wordpress/wp-content/uploads

aber wenn ich git status ausführe, erscheinen sie als gelöscht. Wenn ich versuche, die Änderungen zu übernehmen, werden die Dateien gelöscht, nicht nur vom Tracking entfernt.

Was mache ich falsch?

Ich habe auch versucht

git update-index --assume-unchanged 

aber dies scheint nur Dateien vom Tracking zu entfernen. Ich muss jedoch einen gesamten Ordner (einschließlich Unterordner) vom Tracking entfernen.

1488voto

Tod Birdsall Punkte 15830

Ich bin auf diese Frage gestoßen, während ich nach "git remove folder from tracking" gegoogelt habe. Die Frage des Fragestellers hat mich zur Antwort geführt. Ich fasse sie hier für zukünftige Generationen zusammen.

Frage

Wie entferne ich einen Ordner aus meinem Git-Repository, ohne ihn von meiner lokalen Maschine (d.h. Entwicklungsumgebung) zu löschen?

Antwort

Schritt 1. Fügen Sie den Ordnerpfad zur .gitignore-Datei des Root Ihres Repos hinzu.

path_to_your_folder/

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

git rm -r --cached path_to_your_folder/

Schritt 3. Pushen Sie Ihre Änderungen auf Ihr Git-Repository.

Der Ordner wird aus Git-Sicht als "gelöscht" betrachtet (d.h. sie sind in der Vergangenheit, aber nicht im neuesten Commit, und Personen, die aus diesem Repo ziehen, bekommen die Dateien aus ihren Bäumen entfernt), bleibt aber auf Ihrem Arbeitsverzeichnis, weil Sie --cached verwendet haben.

100voto

qed Punkte 20934

Dies funktioniert für mich:

git rm -r --cached --ignore-unmatch Ordnername

--ignore-unmatch ist hier wichtig, ohne diese Option wird git mit einem Fehler beim ersten nicht im Index befindlichen Datei beenden.

52voto

lukehillonline Punkte 2120

Ich weiß, das ist ein alter Thread, 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 viele Male versucht habe).

Der einzige Weg, den ich gefunden habe, um Git tatsächlich davon abzuhalten, den Ordner zu verfolgen, war folgender:

  1. Machen Sie eine Sicherungskopie des lokalen Ordners und legen Sie sie an einem sicheren Ort ab.
  2. Löschen Sie den Ordner aus Ihrem lokalen Repo
  3. Vergewissern Sie sich, dass der Cache geleert ist git rm -r --cached your_folder/
  4. Fügen Sie your_folder/ zu .gitignore hinzu
  5. Änderungen bestätigen
  6. Fügen Sie die Sicherungskopie zurück in Ihr Repo ein

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

Fragen Sie mich nicht, warum das einfache Leeren des Caches bei mir nicht funktioniert hat, ich bin kein Git-Superwizard, aber so habe ich das Problem gelöst.

29voto

vitalets Punkte 4165

Um das Verzeichnis rekursiv zu vergessen, fügen Sie /*/* zum Pfad hinzu:

git update-index --assume-unchanged wordpress/wp-content/uploads/*/*

Die Verwendung von git rm --cached ist nicht gut für die Zusammenarbeit. Weitere Details hier: Wie kann man das Tracking stoppen und Änderungen an einer Datei in Git ignorieren?

9voto

user3750325 Punkte 1401

Aus der Git-Dokumentation:

Eine weitere nützliche Sache, die Sie tun möchten, ist die Datei in Ihrem Arbeitsverzeichnis zu behalten, aber sie aus Ihrem Staging-Bereich zu entfernen. Mit anderen Worten, Sie möchten die Datei auf Ihrer Festplatte behalten, aber nicht mehr von Git verfolgt haben. Das ist besonders nützlich, wenn Sie vergessen haben, etwas zu Ihrer .gitignore-Datei hinzuzufügen und es versehentlich ins Staging-Bereich übernommen haben, wie z.B. eine große Protokolldatei oder eine Reihe von kompilierten .a-Dateien. Verwenden Sie dazu die Option --cached:

$ git rm --cached readme.txt

Vielleicht also ohne das "-r"?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X