Ich habe ein bereits initialisiertes Git-Repository, das ich hinzugefügt habe .gitignore
Datei zu. Wie kann ich den Dateiindex aktualisieren, damit die Dateien, die ich ignorieren möchte, ignoriert werden?
Ignorieren Sie Dateien, die bereits an ein Git-Repository übergeben wurden [duplicate]
Trobrock
a Einzel Datei, die bereits zu Ihrem Repository hinzugefügt/initialisiert wurde, dhverfolgen Sie die Datei nicht mehr, aber löschen Sie sie nicht aus Ihrem System. Verwenden Sie Folgendes: git rm --cached filename
Untracking jeden Datei, die sich jetzt in Ihrer befindet .gitignore
:
Bestätigen Sie zuerst alle ausstehenden Codeänderungenund führen Sie dann diesen Befehl aus:
git rm -r --cached .
Dadurch werden alle geänderten Dateien aus der entfernt Index(Bereitstellungsbereich), dann führe einfach aus:
git add .
Begehen Sie es:
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 festschreiben, bevor Sie sie ausführen
git add .
Andernfalls gehen alle Änderungen an anderen Dateien verloren.
Bitte seien Sie vorsichtig, wenn Sie dies in ein Repository verschieben und von woanders in einen Zustand ziehen, in dem diese Dateien noch verfolgt werden, werden die Dateien GELÖSCHT
-
Denken Sie daran, alle Ihre Änderungen vorher zu bestätigen, da Sie sonst die Kontrolle über alle geänderten Dateien verlieren
– Hoang Pham
13. Januar 2010 um 14:48 Uhr
-
@TravisWebb Sie müssten sicherstellen, dass Sie zuerst .gitignore einrichten. Außerdem neige ich dazu, nicht alle Dateien aus dem Index zu entfernen, sondern nur die, die ich brauche, indem ich Fileglobs wie *.o verwende
– Jason S
27. Dezember 2011 um 20:41 Uhr
-
git rm -r –cached . entfernt viel mehr Dateien als im Git Ignorieren für mich 🙁 :(. Es entfernte Dateien in Verzeichnissen, die ich nicht einmal aufgelistet habe
– Dekan Hiller
14. August 2012 um 20:07 Uhr
-
Tolle Antwort, aber
git rm --cached filename
scheint etwas weniger drastisch zu sein imho..– Jim Morrison
21. Oktober 2013 um 20:37 Uhr
-
@JimMorrison du verfehlst den Punkt. Wenn Sie ein großes Projekt mit einer komplizierten .gitignore-Datei haben (z. B. ein C#-Projekt in Visual Studio), ist es mühsam, jede einzelne zu entfernende Datei herauszufinden. Diese drei einfachen Befehle beheben alles schmerzlos.
– langer Hals
13. November 2013 um 13:52 Uhr
dyodji
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 diese Änderungen niemals einchecken möchten), als das, was Sie tun möchten ist:
git update-index --assume-unchanged <file>
Wenn Sie Änderungen erneut verfolgen möchten
git update-index --no-assume-unchanged <file>
Sehen git-update-index(1) Handbuchseite.
Schauen Sie sich auch die an skip-worktree
und no-skip-worktree
Optionen für update-index, wenn Sie dies benötigen, um nach einem git-reset (über)
Update: Da die Leute gefragt haben, hier ist ein praktischer (und aktualisierter, da unten kommentierter) Alias, um zu sehen, welche Dateien derzeit in Ihrem lokalen Arbeitsbereich “ignoriert” (–assume-unchanged) werden
$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
-
Das ist genial! Genial nützlich. Wissen Sie, ob es eine Möglichkeit gibt, eine Liste aller „angehaltenen“ Dateien zu erhalten?
– Kunstvoller Roboter
5. Februar 2013 um 13:06 Uhr
-
Das wird für Sie funktionieren:
git ls-files -v
Wenn das gedruckte Zeichen ein Kleinbuchstabe ist, wird die Datei als unverändert markiert markiert. siehe: stackoverflow.com/a/2363495/677381 und: git-scm.com/docs/git-ls-files– dyodji
6. Februar 2013 um 1:33 Uhr
-
Hier ist meine etwas ausführlichere Version der
ignored
Alias, wie er in meiner Datei ~/.gitconfig erscheint:ignored = !git ls-files -v $(git rev-parse --show-toplevel) | (grep '^[[:lower:]]' || echo 'None ignored.') && echo '\nIgnore changes with: git update-index --assume-unchanged <file> \nor track again with: git update-index --no-assume-unchanged <file>'
Der oberste Teil davon stellt sicher, dass das gesamte Repository durchsucht wird.– Chris
10. Februar 2015 um 6:22 Uhr
-
Unglücklicherweise
--assume-unchanged
funktioniert nicht mitgit stash
: Die Änderungen werden während rückgängig gemachtgit stash
und währenddessen nicht erneut angewendetgit stash pop
. Siehe diese Frage.– Scott Weldon
27. April 2016 um 17:39 Uhr
-
Ich bin mir nicht sicher, ob die Syntax auf dem Mac anders ist, aber ich musste den Alias leicht ändern
git config --global alias.hidden '!git ls-files -v | grep "^[[:lower:]]"'
– Cristian Ramírez
13. März 2018 um 16:14 Uhr
Um eine Datei, die bereits zu Ihrem Repository hinzugefügt/initialisiert wurde, aufzuheben, dh die Datei nicht mehr zu verfolgen, aber nicht aus Ihrem System zu löschen, verwenden Sie: git rm --cached filename
-
Dies war der perfekte Weg, um die paar Dateien zu entfernen, die ich hinzugefügt, festgeschrieben, aber später festgestellt hatte, dass sie nicht nachverfolgt werden mussten. Nachdem ich diese Dateien zu .gitignore hinzugefügt hatte, konnte ich dies tun und sie perfekt untracken.
– Andreas Larned
8. April 2011 um 16:17 Uhr
-
Tipp: zum Beispiel wenn Sie hinzufügen
*.config
zu deinem.gitignore
du kannst tungit rm --cached *.config
zu stoppen, alle zu verfolgen*.config
Dateien.– dav_i
6. März 2013 um 13:30 Uhr
-
Beachten Sie auch, dass dadurch die Dateien aus anderen Repos gelöscht werden, in die Sie pushen, obwohl sie auf Ihrem System verbleiben. Wenn Sie Änderungen an Dateien einfach ignorieren und sie nicht aus den Repos anderer Benutzer löschen möchten, versuchen Sie es mit
git update-index --assume-unchanged file.name
– dav_i
8. März 2013 um 10:15 Uhr
-
IMO, das ist die richtige Antwort. Die Wiki-Antwort funktioniert irgendwie, ist aber furchtbar schwerfällig, besonders angesichts der Frage. (Ich würde das Wiki reparieren, aber ich bin mir nicht sicher wie. “Bald!” 😉
– Oli
17. Juli 2014 um 3:20 Uhr
-
@Olie sein äußerst Vorsicht mit dieser “Lösung”. Dies Wille Entfernen Sie die Datei im Repo, und jeder, der diese Änderung durchführt, wird die Datei ebenfalls entfernen lassen. Die beste Lösung wäre
assume-unchanged
wie @dav_i sagte, oder--skip-worktree
als Alternative.– Sebastianb
12. September 2017 um 20:37 Uhr
Anton Stubbs
Jawohl – .gitignore
Das System ignoriert nur Dateien, die derzeit nicht unter Versionskontrolle von Git stehen.
Dh wenn Sie bereits eine Datei namens test.txt
verwenden git-add
dann hinzufügen test.txt
zu .gitignore
wird noch Änderungen an verursachen test.txt
verfolgt werden.
Sie müssten git rm test.txt
zuerst und begehen Sie diese Änderung. Erst dann werden Änderungen vorgenommen test.txt
ignoriert werden.
Entfernen Sie abschließende Leerzeichen in .gitignore
Stellen Sie außerdem sicher, dass Ihre .gitignore-Datei keine nachgestellten Leerzeichen enthält. Ich bin auf diese Frage gekommen, weil ich nach einer Antwort gesucht habe, dann hatte ich das komische Gefühl, ich sollte den Editor öffnen, anstatt nur .gitignore zu cat’en. Ein einzelnes zusätzliches Leerzeichen am Ende entfernt und Puh es funktioniert jetzt 🙂
-
Ich hatte genau das gleiche Problem :P. Ich bin deswegen auch auf diese Frage gekommen. Gut, dass du das hier dokumentiert hast. +1
– Hindol
11. Juli 2012 um 5:08 Uhr
-
Wenn Sie wie ich vi verwenden, um .gitignore schnell zu bearbeiten, verwenden Sie ‘:set list’, um Leerzeichen anzuzeigen.
– Sam Giles
12. März 2013 um 16:35 Uhr
-
Das ist mir passiert, als ich a gemacht habe
echo node_modules >> .gitignore
(zumindest unter Windows)– Khôi
3. Mai 2014 um 20:16 Uhr
-
Wochenlang war ich darüber frustriert, bis ich Ihren Whitespace-Beitrag sah. Danke, mein Problem behoben.
– Flammen
8. Oktober 2015 um 22:01 Uhr
Orlando
Ich habe diese Schritte befolgt
git rm -r --cached .
git add .
git reset HEAD
Danach lösche git alle Dateien (*.swp in meinem Fall), die ignoriert werden sollten.
-
Ich hatte genau das gleiche Problem :P. Ich bin deswegen auch auf diese Frage gekommen. Gut, dass du das hier dokumentiert hast. +1
– Hindol
11. Juli 2012 um 5:08 Uhr
-
Wenn Sie wie ich vi verwenden, um .gitignore schnell zu bearbeiten, verwenden Sie ‘:set list’, um Leerzeichen anzuzeigen.
– Sam Giles
12. März 2013 um 16:35 Uhr
-
Das ist mir passiert, als ich a gemacht habe
echo node_modules >> .gitignore
(zumindest unter Windows)– Khôi
3. Mai 2014 um 20:16 Uhr
-
Wochenlang war ich darüber frustriert, bis ich Ihren Whitespace-Beitrag sah. Danke, mein Problem behoben.
– Flammen
8. Oktober 2015 um 22:01 Uhr
Ahmed Awais
Komplexe Antworten überall!
Verwenden Sie einfach Folgendes
git rm -r --cached .
Es entfernt die Dateien, die Sie ignorieren möchten, vom Ursprung und nicht vom Master auf Ihrem Computer!
Danach einfach verpflichten und pushen!