2833 Stimmen

Ignorieren von Dateien, die bereits an ein Git-Repository übergeben wurden

Ich habe ein bereits initialisiertes Git-Repository, zu dem ich eine .gitignore Datei an. Wie kann ich den Dateiindex aktualisieren, damit die Dateien, die ich ignorieren möchte, ignoriert werden?

4708voto

trobrock Punkte 45179

Zum Aufheben der Verfolgung einer einzeln Datei, die bereits zu Ihrem Repository hinzugefügt/initialisiert wurde, d.h. beenden Sie die Verfolgung der Datei, aber löschen Sie sie nicht aus Ihrem System: git rm --cached filename

Aufspüren cada Datei, die sich jetzt in Ihrer .gitignore :

Übertragen Sie zunächst alle ausstehenden Codeänderungen und führen Sie dann diesen Befehl aus:

git rm -r --cached .

Dies entfernt alle geänderten Dateien aus dem Index (Bereitstellungsraum), dann rennen Sie einfach los:

git add .

Setzen Sie es um:

git commit -m ".gitignore is now working"

Rückgängig machen git rm --cached filename verwenden git add filename .

Stellen Sie sicher, dass Sie alle wichtigen Änderungen übertragen, bevor Sie git add . Andernfalls gehen alle Änderungen an anderen Dateien verloren.

Bitte seien Sie vorsichtig, wenn Sie dies in ein Repository pushen und von irgendwo anders in einen Zustand ziehen, in dem diese Dateien noch verfolgt werden, werden die Dateien GELÖSCHT

294 Stimmen

Achten Sie darauf, dass Sie alle Änderungen vorher festschreiben, sonst verlieren Sie die Kontrolle über alle geänderten Dateien.

2 Stimmen

Dies scheint nicht auf einen Push oder einen sauberen Klon zu bleiben. irgendwelche Ideen?

9 Stimmen

@TravisWebb Sie müssen sicherstellen, dass Sie zuerst .gitignore einrichten. Ich neige auch dazu, nicht alle Dateien aus dem Index zu entfernen, sondern nur die, die ich brauche, indem ich Fileglobs wie *.o

733voto

dyodji Punkte 6894

Wenn Sie versuchen, Änderungen an einer Datei zu ignorieren, die bereits im Repository verfolgt wird (z.B. eine dev.properties-Datei, die Sie für Ihre lokale Umgebung ändern müssten, aber Sie würden diese Änderungen niemals einchecken wollen), dann ist das, was Sie tun wollen, Folgendes:

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

Wenn Sie wieder mit der Verfolgung von Änderungen beginnen wollen

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

Ver git-update-index(1) Handbuchseite .

Werfen Sie auch einen Blick auf die skip-worktree y no-skip-worktree Optionen für update-index, wenn dieser nach einem Git-Reset bestehen bleiben soll ( über )


Aktualisierung: Da einige Leute danach gefragt haben, hier ist ein praktischer (und aktualisierter, da unten kommentierter) Alias, um zu sehen, welche Dateien in Ihrem lokalen Arbeitsbereich derzeit "ignoriert" (--assume-unchanged) werden

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

19 Stimmen

Das ist genial! Unglaublich nützlich. Wissen Sie, ob es eine Möglichkeit gibt, eine Liste aller "zurückgestellten" Dateien zu erhalten?

15 Stimmen

Das wird für dich funktionieren: git ls-files -v Wenn das gedruckte Zeichen ein Kleinbuchstabe ist, wird die Datei als "assume-unchanged" markiert. siehe: stackoverflow.com/a/2363495/677381 und: git-scm.com/docs/git-ls-files

0 Stimmen

Dies funktioniert nur, solange eine Ihrer Fernbedienungen keine Änderungen an der Datei vornimmt, die im Widerspruch zu Ihrer Datei stehen.

384voto

pagetribe Punkte 14573

Um die Verfolgung einer Datei aufzuheben, die bereits zu Ihrem Repository hinzugefügt/initialisiert wurde, d.h. die Verfolgung der Datei zu beenden, sie aber nicht aus Ihrem System zu löschen, verwenden Sie: git rm --cached filename

10 Stimmen

Dies war der perfekte Weg, um einige Dateien zu entfernen, die ich hinzugefügt und übertragen hatte, von denen ich aber später feststellte, dass sie nicht verfolgt werden mussten. Nachdem ich diese Dateien zu .gitignore hinzugefügt hatte, konnte ich dies tun und sie perfekt entfernen.

9 Stimmen

Tipp: Wenn Sie zum Beispiel Folgendes hinzufügen *.config zu Ihrem .gitignore können Sie tun git rm --cached *.config um die Verfolgung aller *.config Dateien.

66 Stimmen

Beachten Sie auch, dass dadurch die Dateien aus anderen Repos, in die Sie pushen, gelöscht werden, auch wenn sie auf Ihrem System bleiben. Wenn Sie nur Änderungen an Dateien ignorieren und sie nicht aus den Repos anderer Benutzer löschen wollen, versuchen Sie es mit git update-index --assume-unchanged file.name

90voto

Antony Stubbs Punkte 12453

Ja - .gitignore System ignoriert nur Dateien, die derzeit nicht unter Versionskontrolle von Git stehen.

D.h. wenn Sie bereits eine Datei namens test.txt mit git-add und fügen dann hinzu test.txt a .gitignore wird weiterhin Änderungen an test.txt nachverfolgt werden.

Sie müssten git rm test.txt und bestätigen Sie diese Änderung. Erst dann werden Änderungen an test.txt ignoriert werden.

13 Stimmen

Das ist nicht ganz richtig, es ist möglich, Änderungen in einer verfolgten Datei zu ignorieren... siehe meine Antwort: stackoverflow.com/a/11366713/677381

0 Stimmen

Git update-index --assume-unchanged <Datei> und git rm --caheced <Datei> haben bei mir nicht funktioniert. Ich habe git rm <Datei> durchgeführt und danach eine neue Datei erstellt <file> wird erfolgreich ignoriert. Ich verwende Git Version 1.8.1 - falls das das Problem war.

0 Stimmen

Ihre Syntax ist hier falsch. Es heißt git rm test.txt und hier ist ein Link zu einer ausführlicheren Antwort stackoverflow.com/questions/12661306/

57voto

MikeJansen Punkte 3159

Nachfolgende Leerzeichen in .gitignore entfernen

Stellen Sie außerdem sicher, dass Sie keine Leerzeichen am Ende Ihrer .gitignore-Datei haben. Ich bin zu dieser Frage gekommen, weil ich nach einer Antwort gesucht habe und dann das komische Gefühl hatte, dass ich den Editor öffnen sollte, anstatt einfach .gitignore zu katalogisieren. Ich entfernte ein einzelnes zusätzliches Leerzeichen am Ende und puff es funktioniert jetzt :)

4 Stimmen

Ich hatte genau das gleiche Problem, :P. Deswegen bin ich auch zu dieser Frage gekommen. Gut, dass du das hier dokumentiert hast. +1

3 Stimmen

Wenn Sie wie ich vi benutzen, um .gitignore schnell zu bearbeiten, verwenden Sie ':set list', um Leerzeichen anzuzeigen.

1 Stimmen

Das ist mir passiert, als ich eine echo node_modules >> .gitignore (zumindest unter Windows)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X