wake-up-neo.com

Einen Ordner aus Git Tracking entfernen

Ich muss einen Ordner (Namensuploads) von der Nachverfolgung 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 git status lief, werden sie als gelöscht angezeigt. Wenn ich versuche, die Änderungen zu bestätigen, werden die Dateien gelöscht und nicht nur aus dem Tracking entfernt.

Was mache ich falsch? 

Ich habe es auch versucht

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

dies scheint jedoch nur Dateien zu entfernen. Aber ich muss einen ganzen Ordner (einschließlich Unterordner) aus dem Tracking entfernen.

241
Stefan

Auf diese Frage stieß ich beim Googeln nach "git remove folder from tracking". 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 (d. H. Der Entwicklungsumgebung) zu löschen?

Antworten

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

path_to_your_folder/

Schritt 2. Entfernen Sie den Ordner aus Ihrer lokalen Git-Verfolgung, belassen Sie ihn jedoch auf Ihrer Festplatte.

git rm -r --cached path_to_your_folder/

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

Der Ordner wird aus der Sicht von Git als "gelöscht" betrachtet (dh er befindet sich in der Vergangenheit, aber nicht in der letzten Festschreibung, und Personen, die aus diesem Repo ziehen, werden die Dateien aus ihren Bäumen entfernt), bleiben jedoch in Ihrem Arbeitsverzeichnis weil Sie --cached verwendet haben.

565
Tod Birdsall

Das funktioniert für mich:

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

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

13
qed

Um das Verzeichnis zu vergessen, fügen Sie dem Pfad rekursiv /*/* 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 ich das Tracking stoppen und Änderungen an einer Datei in Git ignorieren?

5
vitalets

Aus der Git-Dokumentation: 

Eine weitere nützliche Funktion besteht darin, die Datei in Ihrem Arbeitsbaum zu belassen, sie jedoch aus Ihrem Bereitstellungsbereich zu entfernen. Mit anderen Worten, Sie möchten die Datei auf Ihrer Festplatte behalten, Git aber nicht mehr verfolgen. Dies ist besonders nützlich, wenn Sie vergessen haben, Ihrer .gitignore-Datei etwas hinzuzufügen und diese versehentlich zu inszenieren, beispielsweise eine große Protokolldatei oder eine Reihe von kompilierten. Verwenden Sie dazu die Option --cached:

$ git rm --cached readme.txt

Also nicht das "-r" enthalten?

4
user3750325

Schritt 2.5: Bestätigen Sie Ihre Änderungen:

>git commit

Wenn Sie drücken, ohne dies vorher zu tun, tut es nichts!

1
M.H.

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

Die einzige Möglichkeit, das Verfolgen des Ordners mit git form zu stoppen, bestand darin, Folgendes zu tun:

  1. Erstellen Sie eine Sicherungskopie des lokalen Ordners und legen Sie diese an einem sicheren Ort ab.
  2. Löschen Sie den Ordner aus Ihrem lokalen Repo
  3. Stellen Sie sicher, dass der Cache gelöscht wird git rm -r --cached your_folder/
  4. Fügen Sie your_folder/ zu .gitignore hinzu
  5. Änderungen übernehmen 
  6. Fügen Sie die Sicherung wieder Ihrem Repo hinzu

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

Fragen Sie mich nicht, warum das Löschen des Cache für mich nicht funktioniert hat, ich bin kein Git-Super-Assistent, aber so habe ich das Problem gelöst.

0
lukehillonline