Entfernen Sie die Datei aus dem Repository, aber bewahren Sie sie lokal auf

369

Ich habe einen Ordner, den ich in meinem Remote-Repository entfernen möchte. Ich möchte es löschen, aber den Ordner auf meinem Computer behalten

Rodrigo Souza
quelle
Bitte schauen Sie sich die vorgeschlagenen verwandten Fragen an, während Sie Ihre schreiben - das Duplikat war wahrscheinlich eines der ersten beiden.
Cascabel
Ein weiteres Duplikat: stackoverflow.com/questions/1273108/…
Cascabel

Antworten:

637
git rm --cached -r somedir

Stellt das Löschen des Verzeichnisses bereit, berührt jedoch nichts auf der Festplatte. Dies funktioniert auch für eine Datei wie:

git rm --cached somefile.ext

Danach möchten Sie möglicherweise somedir/oder somefile.extzu Ihrer .gitignoreDatei hinzufügen , damit git nicht versucht, sie wieder hinzuzufügen.

Jamessan
quelle
24
Fügen Sie dann den Pfad zu .gitignore hinzu, damit git nicht versucht, ihn später hinzuzufügen.
Grossvogel
3
Wird dies dazu führen, dass (Dateien in) dem Verzeichnis entfernt werden, wenn er von der Fernbedienung zieht?
Bstpierre
Nicht wenn er zieht; Die Dateien bleiben während des automatischen Zusammenführungsprozesses des Pulls lokal entfernt. Danach werden die Dateien durch einen Push serverseitig entfernt.
Walter Mundt
7
Was passiert, wenn ich eine dritte Fernbedienung habe? Werden die entsprechenden Dateien in einem zukünftigen Pull entfernt? Ich frage, weil ich der Meinung bin, dass dies ein recht häufiger Anwendungsfall ist, dh einige Dateien in das Repo einchecken, zu einem späteren Zeitpunkt feststellen, dass sie aus gutem Grund zwischen Fernbedienungen abweichen und eigentlich nie im Repo gewesen sein sollten Um dies zu beheben, müssen alle lokalen Kassen genau so bleiben, wie sie sind, aber die Dateien aus dem Repo entfernen.
Bobby Jack
6
Für einzelne Dateien können Sie tungit rm --cached path/to/file
Travis Reeder
3

Ich würde nur:

  • Verschieben Sie den Ordner aus Ihrem Arbeitsbaum
  • git rm Übertragen Sie im Ordner die Änderung
  • Hinzufügen zu .gitignore(oder .git/info/excludes), Festschreiben der Änderung
  • Verschieben Sie den Ordner zurück
Jeff
quelle
8
Dies ist keine gute Lösung - was ist, wenn Sie ein sehr großes Verzeichnis haben?
Ioleo
wahrscheinlich müssengit rm -r
theUtherSide
1
@loostro verschiebe es einfach nicht auf ein anderes Blockgerät. Die meisten Dateisysteme aktualisieren nur den Inode der Datei und verschieben nicht buchstäblich das gesamte Verzeichnis
648trindade