Mein erstes Commit enthielt einige Protokolldateien. Ich habe *log
zu meinem hinzugefügt .gitignore
, und jetzt möchte ich die Protokolldateien aus meinem Repository entfernen.
git rm mylogfile.log
entfernt eine Datei aus dem Repository, entfernt sie aber auch aus dem lokalen Dateisystem.
Wie kann ich diese Datei aus dem Repo entfernen, ohne meine lokale Kopie der Datei zu löschen?
git
repository
remote-server
delete-file
git-rm
Mveerman
quelle
quelle
Antworten:
Aus der Man-Datei :
Also für eine einzelne Datei:
und für ein einzelnes Verzeichnis:
quelle
svn rm --keep-local
.git pull
wenn Sie hinter dem Commit nachgit rm
git commit -m "Commit message"
und verwenden müssengit push
. Wenn Sie andere bereitgestellte Änderungen haben (überprüfen Sie mitgit status
), werden diese zu diesem Zeitpunkt ebenfalls festgeschrieben.git rm --cached mylogfile.log
und lösche die Datei aus dem Repository. Um zu vermeiden, dass die Datei auf dem Produktivsystem verloren geht, mache ich eine Sicherungskopie der Datei und ziehe danach. Die Datei wird wie zuvor erwähnt gelöscht und muss aus Ihrem Backup zurückkopiert werden. Das ist ziemlich schmerzhaft, aber ich habe keine bessere Lösung für dieses Problem gefunden.Gehen Sie folgendermaßen vor, um einen gesamten Ordner aus dem Repo zu entfernen (z. B. Resharper-Dateien):
Ich hatte einige Resharper-Dateien festgeschrieben und wollte nicht, dass diese für andere Projektbenutzer bestehen bleiben.
quelle
Git Push repo branch
ausführen, um die Dateien tatsächlich von der Fernbedienung zu entfernen.Sie können Dateien auch basierend auf Ihrem .gitignore aus dem Repository entfernen, ohne sie aus dem lokalen Dateisystem zu löschen:
Oder alternativ unter Windows Powershell:
quelle
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
. Bitte erwägen Sie, diese Lösung zu.gitkeep
denen ein leerer Ordner im Repository erhalten bleibt. Z.B..gitignore
Ordner enthaltenuploads
und Repo ist gezwungen, den Überblick zu behalten.gitkeep
. Wenn Sie alles aus dem Repouploads
entfernen, wird es auch entfernt.gitkeep
.Gemäß meiner Antwort hier: /programming/6313126/how-to-remove-a-directory-in-my-github-repository
Um Ordner / Verzeichnis oder Datei nur aus dem Git-Repository und nicht aus dem lokalen zu entfernen, versuchen Sie 3 einfache Schritte.
Schritte zum Entfernen des Verzeichnisses
Schritte zum Ignorieren dieses Ordners bei den nächsten Commits
Die .gitignore- Datei sieht folgendermaßen aus
quelle
Wenn Sie vertrauliche Daten festgeschrieben haben (z. B. eine Datei mit Kennwörtern), sollten Sie diese vollständig aus dem Verlauf des Repositorys löschen. Hier ist eine Anleitung, die erklärt, wie das geht: http://help.github.com/remove-sensitive-data/
quelle
Eine allgemeinere Lösung:
.gitignore
Datei bearbeiten .ECHO mylogfile.log >> .gitignore
Entfernen Sie alle Elemente aus dem Index.
git rm -r -f --cached .
Index neu erstellen.
git add .
Machen Sie ein neues Commit
git commit -m "Removed mylogfile.log"
quelle
rm --cashed
ist, dass die Datei schließlich gelöscht wird, wenn man sie zieht - richtig? Und dies ist nicht das, was die Leute wollen, wenn sie sagen "Entfernen Sie eine Datei aus dem Repository, ohne sie aus dem lokalen Dateisystem zu löschen ". Warum ist die oben akzeptierte Lösung mir ein Rätsel - wahrscheinlich hat das OP alleine gearbeitet und nie gezogen? Keine Ahnung. Ich verstehe die Github "einmal geschoben immer da" Ausgabe von c(Von https://help.github.com/articles/ignoring-files )
Daher nicht löschen, sondern Änderungen daran für immer ignorieren. Ich denke, dies funktioniert nur lokal, sodass Mitarbeiter weiterhin Änderungen daran sehen können, es sei denn, sie führen denselben Befehl wie oben aus. (Muss dies jedoch noch überprüfen.)
Hinweis: Dies beantwortet die Frage nicht direkt, sondern basiert auf Folgefragen in den Kommentaren der anderen Antworten.
quelle
Wenn Sie nur eine Datei entfernen und nicht aus dem lokalen und Remote-Repo löschen möchten, verwenden Sie diesen Befehl:
quelle
Die obigen Antworten haben bei mir nicht funktioniert. Ich habe
filter-branch
alle festgeschriebenen Dateien entfernt.Entfernen Sie eine Datei aus einem Git-Repository mit:
Entfernen Sie einen Ordner aus einem Git-Repository mit:
Dadurch wird das Verzeichnis oder die Datei aus allen Commits entfernt.
Sie können ein Commit angeben, indem Sie Folgendes verwenden:
Oder eine Reichweite:
Um alles auf die Fernbedienung zu übertragen, haben Sie folgende Möglichkeiten:
quelle
git rm -r --cached NAME
ist der Trick, um es aus Ihrem lokalen Git-Repo zu entfernen und zu verhindern, dass es jeden betrifft, der später zieht (indem Sie den Verlauf der Datei oder des Verzeichnisses aus Git löschen)Ignorieren Sie die Dateien, entfernen Sie die Dateien aus git, aktualisieren Sie git (zum Entfernen).
Hinweis: Dies betrifft nicht den Verlauf vertraulicher Informationen.
Dieser Prozess erfordert definitiv ein gewisses Verständnis dafür, was mit Git los ist. Nachdem ich das gewonnen habe, habe ich im Laufe der Zeit gelernt, Prozesse wie:
1) Ignorieren Sie die Dateien
.gitignore
, um sie zu ignorieren. In vielen Fällen, z. B. bei Ihnen, ist das übergeordnete Verzeichnis, z. B.log/
der zu verwendende reguläre Ausdruck..gitignore
Dateiänderung (nicht sicher, ob Push wohlgemerkt benötigt wird, kein Schaden, wenn getan).2) Entfernen Sie die Dateien aus git (nur).
git remove --cached some_dir/
3) Fügen Sie diese Änderung hinzu und übernehmen Sie sie (im Wesentlichen handelt es sich um eine Änderung zum "Hinzufügen" von Löschvorgängen, trotz des ansonsten verwirrenden Befehls "Hinzufügen"!)
git add .
git commit -m"removal"
quelle