Entfernen Sie vorübergehend die Dateien von git

449

Ich habe einen lokalen Git auf meinem Computer eingerichtet. Als ich git initialisierte, fügte ich vorkompilierte Bibliotheken und Binärdateien hinzu. Während meiner Entwicklung möchte ich diese Dateien jedoch nicht mehr zeitweise einchecken. Ich möchte diese Dateien nicht aus dem Repo entfernen. Gibt es eine Möglichkeit, diese Dateien erst zu verfolgen, wenn ich meine Entwicklung abgeschlossen habe? (Ich glaube, ich kann .gitignore nicht verwenden, da es nur für Dateien funktioniert, die nicht in git enthalten sind. Ich möchte die Nachverfolgung von Dateien vorübergehend deaktivieren.)

agent.smith
quelle

Antworten:

723

Git Update-Index sollte tun, was Sie wollen

Dadurch wird git mitgeteilt, dass Sie die Änderungen an der Datei ignorieren möchten
git update-index --assume-unchanged path/to/file

Wenn Sie wieder den Überblick behalten möchten
git update-index --no-assume-unchanged path/to/file

Github-Dokumentation: Update-Index

Andy
quelle
3
Endlich ein Befehl, der tatsächlich für meine versehentlich festgeschriebene Entwicklungsdatei funktioniert, danke :)
Richard de Wit
15
Warum nicht git rm -r --cached <Datei>?
Ehsan
23
@Ehsan scheint git rm --cachedzu einem Löschen der lokalen Kopien auf anderen Computern zu führen, auf denen derselbe Zweig beim nächsten Abrufen ausgecheckt wird. Siehe arlocarreon.com/blog/git/… und insbesondere die Diskussion darunter.
Mit
3
Funktioniert nicht für mich, wenn ich Änderungen an der Datei vornehme, werden sie immer noch zu den enthaltenen Änderungen hinzugefügt. Ich könnte ausschließen, aber irgendwann wird es wahrscheinlich versehentlich hinzugefügt.
MrFox
8
Angenommen, unverändert war nicht für diesen Zweck gedacht. Vielleicht möchten Sie diesen Thread
Appy
264

Sie könnten Ihre Dateien danach nicht mehr verfolgen

git rm -r --cached <file>

Fügen Sie Ihre Dateien mit hinzu

git add -u

sie schieben oder machen was du willst.

cajuuh
quelle
19
Das ist eigentlich die richtige Antwort laut: git-scm.com/book/en/v2/…
Ehsan
git rm --cached .DS_Store dann druckt es rm '../.DS_Store'und die lokale Datei wird gelöscht ??! ( git version 2.6.4 (Apple Git-63))
Weishi Zeng
Habe
Weishi Zeng
4
Dies ist nicht die richtige Antwort, da dadurch die Datei in der Quelle entfernt wird. Das OP möchte lokale Änderungen dieser Datei ignorieren und das Tracking nicht
vollständig
2
WARNUNG: Es werden auch die Dateien entfernt, die Sie entfernen möchten. Die Lösung besteht darin, alle Dateien irgendwohin zu kopieren und sie nach dem Festschreiben wieder zu kopieren.
Psad
111
git rm --cached

Sie sollten jedoch in erster Linie keine kompilierten Binärdateien und externen Abhängigkeiten festlegen. Verwenden Sie stattdessen ein Tool wie Bundler, um diese zu ziehen.

Tekkub
quelle
2
Vergessen Sie nicht die Option -r (rekursiv) für Verzeichnisse: git rm -r --cached
Anatoliy Shuba
36

Verwenden Sie den folgenden Befehl, um die Verfolgung von Dateien aufzuheben

git rm --cached <file path>
Dinesh Vaitage
quelle
7

Das Git-Buch erwähnt dies in Abschnitt 2.4: "Dinge rückgängig machen". Grundsätzlich müssen Sie den Status des Index für einige Dateien auf den HEAD-Status zurücksetzen, dh auf den Status der letzten Prüfung (oder des letzten Commits). Dadurch wird das Staging der Datei auf den aktuellen Index rückgängig gemacht. Der Befehl für diese Aufgabe lautet git reset: [1]

Der Befehl, den Sie ausführen müssen, lautet also:

git reset HEAD /path/to/file

Die neueren Versionen von git (ich glaube seit 1.6 oder so) geben diesen Befehl (und viele mehr) als Tipp bei der Ausführung git status. Diese Versionen sind sehr benutzerfreundlich. Ein persönlicher Tipp: Wenn Sie nur wenige Dateien bereitstellen, verwenden Sie git add -i. Dadurch wird das interaktive Staging-Tool gestartet, das die Sache besonders einfach macht. Außerdem empfehle ich dringend, das Buch zu lesen, da es sehr explizit auf die Verwendung von Git in praktischen Situationen hinweist.

[1] http://www.git-scm.com/book

Eric Spreen
quelle
Ich bin damit einverstanden, dass dies git reset [file]der einfachste Weg ist, Dateien zu entfernen.
Spectral
18
Rückgängigmachen und Aufspüren sind verschiedene Dinge
Jaime Sangcap
6

Keine Antwort auf die ursprüngliche Frage. Aber das könnte jemandem helfen.

Um die vorgenommenen Änderungen anzuzeigen ( wissen Sie, welche Dateien als --assume-unverändert markiert sind )

git ls-files -v

Die resultierende Liste der Dateien hat ein Präfix mit einem Zeichen (z. B. H oder h). Wenn es sich um Kleinbuchstaben handelt (dh h), wurde die Datei als --assume-unverändert markiert

Prime
quelle
5

Ich gehe davon aus, dass Sie fragen, wie ALLE Dateien im Build-Ordner oder im Bin-Ordner entfernt werden sollen, anstatt jede Datei einzeln auszuwählen.

Sie können diesen Befehl verwenden:

git rm -r -f /build\*

Stellen Sie sicher, dass Sie sich im übergeordneten Verzeichnis des Erstellungsverzeichnisses befinden.
Dieser Befehl "löscht" rekursiv alle Dateien, die sich in den Ordnern bin / oder build / befinden. Mit dem Wort "Löschen" meine ich, dass git vorgibt, dass diese Dateien "gelöscht" werden und diese Dateien nicht verfolgt werden. Der Git markiert diese Dateien wirklich als gelöscht.

Stellen Sie sicher, dass Sie Ihren .gitignore für bevorstehende Commits bereit haben.
Dokumentation: git rm

Vraj Pandya
quelle
1

git reset [Datei]

Holen Sie sich die Datei vom Staging-Bereich zurück in das Arbeitsverzeichnis

Ich vergesse oft, meine Knotenmodule zur .gitignore-Datei hinzuzufügen, dies löst das Problem.

Lordharbar
quelle
1

Das hat bei mir funktioniert

git reset HEAD 'Dateiname'

Vivek
quelle
1

So entfernen Sie alle Untrack-Dateien. Versuchen Sie diesen Terminalbefehl

 git clean -fdx
divya d
quelle
Es werden Dateien von der Festplatte und nicht aus dem Git-Verlauf entfernt.
Leonardo
-1

Um nicht verfolgte Dateien und Ordner zu entfernen, setzen Sie git clean -fdx

Khadraoui Khairi
quelle