Entfernen Sie eine vorhandene Datei aus einem Git Repo
126
Ich möchte, dass git mein lokales Entwicklungsprotokoll (log / development.log) in unseren Repositorys nicht mehr verfolgt. Ist das möglich und wie kann ich das machen?
Nur um die vollständige Antwort auf einmal zu geben:
von klemens: Sie müssen die Datei .gitignoreirgendwo über der unerwünschten Datei im Repo zu Ihrer Datei hinzufügen . dh
$ cd $ cat >> .gitignore development.log Cd
von m. narebski: Sie müssen dann die Datei aus dem Repo entfernen, indem Sie "ausführen git rm --cached <file>und diese Entfernung dann festschreiben".
Wenn Sie auch gehofft haben, dass das Repo so aussieht, als hätte es diese Datei nie verfolgt, ist dies viel komplizierter und äußerst entmutigend, da es nicht nur brandneue Commits für jedes einzelne Commit in Ihrer Geschichte erstellt und so die Interoperabilität auf böse Weise zerstört zwischen anderen Personen, die Ihr Repo geklont haben, aber es lässt auch jeden dieser Commits ungetestet (vorausgesetzt, Sie testen Ihre Commits, bevor Sie sie machen).
In Anbetracht dieser Einschränkung ist das Werkzeug, nach dem Sie suchen, wenn dies Ihr Ziel ist filter-branch. Das erste Beispiel macht genau das, was ich beschreibe.
Mit git rm --cached scheint es nicht nur den Zweig entfernt zu haben, sondern wenn ich auf ein anderes System ziehe, werden die Dateien auf diesem System physisch gelöscht. Irgendeine Idee, was dort los ist?
Biagidp
2
Antwort auf das oben Gesagte: Ich glaube, das Problem bestand darin, dass ich vor dem Abrufen der Änderungen keinen .gitignore auf dem alternativen System installiert hatte, sodass beim Löschen die lokale Kopie entfernt wurde. Zumindest ist das die Theorie
Biagidp
53
Verwenden Sie einfach, um die Verfolgung der Datei zu beenden git rm --cached <filename>.
Wie die anderen hier bereits betont haben, kann das Hinzufügen der Datei zu .gitignore verhindern, dass Sie sie später versehentlich erneut hinzufügen.
Dies ist nur die Hälfte der Antwort. .gitignoreEinträge gelten nicht für Dateien, die bereits verfolgt werden.
CB Bailey
10
Der zweite Teil ist git rm --cached <file>und dann diese Entfernung zu begehen.
Jakub Narębski
1
Warum gibt es für git keinen einfachen Befehl, um alle derzeit verfolgten Dateien gemäß der aktuellen .gitignore-Datei neu zu bewerten? ... oder übt das viel zu viel gesunden Menschenverstand aus? : p
Antworten:
Nur um die vollständige Antwort auf einmal zu geben:
von klemens: Sie müssen die Datei
.gitignore
irgendwo über der unerwünschten Datei im Repo zu Ihrer Datei hinzufügen . dh$ cd $ cat >> .gitignore development.log Cd
von m. narebski: Sie müssen dann die Datei aus dem Repo entfernen, indem Sie "ausführen
git rm --cached <file>
und diese Entfernung dann festschreiben".Wenn Sie auch gehofft haben, dass das Repo so aussieht, als hätte es diese Datei nie verfolgt, ist dies viel komplizierter und äußerst entmutigend, da es nicht nur brandneue Commits für jedes einzelne Commit in Ihrer Geschichte erstellt und so die Interoperabilität auf böse Weise zerstört zwischen anderen Personen, die Ihr Repo geklont haben, aber es lässt auch jeden dieser Commits ungetestet (vorausgesetzt, Sie testen Ihre Commits, bevor Sie sie machen).
In Anbetracht dieser Einschränkung ist das Werkzeug, nach dem Sie suchen, wenn dies Ihr Ziel ist
filter-branch
. Das erste Beispiel macht genau das, was ich beschreibe.quelle
Verwenden Sie einfach, um die Verfolgung der Datei zu beenden
git rm --cached <filename>
.Wie die anderen hier bereits betont haben, kann das Hinzufügen der Datei zu .gitignore verhindern, dass Sie sie später versehentlich erneut hinzufügen.
quelle
Fügen Sie die Gitignore-Datei hinzu.
Siehe http://git-scm.com/docs/gitignore
quelle
.gitignore
Einträge gelten nicht für Dateien, die bereits verfolgt werden.git rm --cached <file>
und dann diese Entfernung zu begehen.