Wenden Sie .gitignore auf ein vorhandenes Repository an, das bereits eine große Anzahl von Dateien verfolgt

Lesezeit: 8 Minuten

Wenden Sie gitignore auf ein vorhandenes Repository an das bereits
Um versteckte

Ich habe ein vorhandenes Visual Studio-Projekt in meinem Repository. Ich habe kürzlich eine .gitignore-Datei unter meinem Projekt hinzugefügt und gehe davon aus, dass dies Git anweist, die in der Datei aufgelisteten Dateien zu ignorieren.

Mein Problem ist, dass all diese Dateien bereits verfolgt werden und Git meines Wissens keine Datei ignoriert, die bereits verfolgt wurde, bevor dieser Datei eine Regel hinzugefügt wurde, um sie zu ignorieren.

Es wurde vorgeschlagen zu verwenden: git rm --cached und die Verfolgung manuell aufheben, aber das wird ewig dauern, bis ich sie einzeln durchgegangen bin.

Ich habe darüber nachgedacht, das Repository zu löschen und erneut zu erstellen, aber diesmal mit vorhandener .gitignore-Datei, aber es muss einen besseren Weg geben, dies zu tun.

  • du kannst git rm --cached ganze Verzeichnisse mit der -r Option, falls das hilfreich ist

    – Nathan Wallace

    29. Oktober 2013 um 15:52 Uhr


  • Siehe auch: Untrack-Dateien von Git entfernen

    – Patrick James McDougle

    29. Mai 2014 um 18:40 Uhr


  • mögliches Duplikat von Dateien ignorieren, die bereits an ein Git-Repository übergeben wurden

    – fkössler

    28. Mai 2015 um 7:58 Uhr

  • Mögliches Duplikat von Making git „forget“ about a file that was tracked but is now in .gitignore

    – Patrick James McDougle

    30. Juli 2016 um 23:34 Uhr

Wenden Sie gitignore auf ein vorhandenes Repository an das bereits
Um versteckte

Diese Antwort löste mein Problem:

Als allererstes, Übernehmen Sie alle ausstehenden Änderungen.

Führen Sie dann diesen Befehl aus:

git rm -r --cached .

Dies entfernt alles aus dem Index und führt dann einfach Folgendes aus:

git add .

Begehen Sie es:

git commit -m ".gitignore is now working"

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

  • Perfekte Antwort ! Bitte fügen Sie ein hinzu git push origin auch um die Änderungen im Remote-Repository widerzuspiegeln.

    – Sankt Berde

    1. Dezember 2015 um 5:56 Uhr

  • Ich habe angefangen, diese Antwort zu verwenden … und sie hat fast alles in meinem Projekt gelöscht! Offensichtlich habe ich etwas falsch gemacht. Aber ich möchte die Leute warnen, diesem Vorschlag nicht beiläufig zu folgen.

    – Markus Olbert

    16. Juni 2016 um 16:18 Uhr

  • Führt dies dazu, dass der Verlauf für die Dateien verloren geht, wenn Sie sie entfernen und erneut hinzufügen

    – Aran Mulholland

    28. Februar 2017 um 12:59 Uhr

  • Ich frage mich, wie viele Commits es verwenden .gitignore is now working Botschaft. 🙂

    – Ich habe keine Ahnung

    3. Juni 2019 um 20:23 Uhr

  • @Ich habe keine Ahnung github.com/search?q=.gitignore+is+now+working&type=Commits Los geht’s!

    – bharadhwaj

    1. Juni 2020 um 9:04 Uhr

Wenden Sie gitignore auf ein vorhandenes Repository an das bereits
Irgendeine anonyme Person

  1. Erstellen Sie eine .gitignore-Datei. Dazu erstellen Sie einfach eine beliebige leere .txt-Datei.

  2. Dann müssen Sie seinen Namen ändern, indem Sie die folgende Zeile in die cmd schreiben (where git.txt ist der Name der Datei, die Sie gerade erstellt haben):

rename git.txt .gitignore

  1. Dann können Sie die Datei öffnen und alle nicht verfolgten Dateien schreiben, die Sie für immer ignorieren möchten. Meine sieht zum Beispiel so aus:

    Junk-Dateien des Betriebssystems
    [Tt]humbs.db *.DS_Store

    #Visual Studio-Dateien *.[Oo]bj *.user *.aps *.pch *.vspscc *.vssscc *_i.c *_p.c *.ncb *.suo *.tlb *.tlh *.bak *.[Cc]Schmerz *.ilk *.log *.lib *.sbr *.sdf
    .pyc
    .xml ipch/obj/
    [Bb]in
    [Dd]Ebug
    /
    [Rr]beruhigen
    / Ankh.NoLoad

    #Werkzeuge _ReSharper*/
    .schärfer
    [Tt]Europäische Sommerzeit[Rr]Ergebnis

    #Projektdateien
    [Bb]Gebäude/

    #Subversion-Dateien .svn

    Office Temp-Dateien

    ~$*

Da ist ein ganze Sammlung nützlicher .gitignore-Dateien von GitHub

  1. Sobald Sie diese haben, müssen Sie sie wie jede andere Datei zu Ihrem Git-Repository hinzufügen, nur dass sie sich im Stammverzeichnis des Repositorys befinden muss.

  2. Dann musst du in deinem Terminal folgende Zeile schreiben:

    git config –global core.excludesfile ~/.gitignore_global

Aus dem offiziellen Dokument:

Sie können auch eine globale .gitignore-Datei erstellen, bei der es sich um eine Liste mit Regeln zum Ignorieren von Dateien in jedem Git-Repository auf Ihrem Computer handelt. Beispielsweise könnten Sie die Datei unter ~/.gitignore_global erstellen und ihr einige Regeln hinzufügen.

Terminal öffnen. Führen Sie den folgenden Befehl in Ihrem Terminal aus: git config –global core.excludesfile ~/.gitignore_global

Wenn das Repository bereits existiert, müssen Sie diese Befehle ausführen:

git rm -r --cached .
git add .
git commit -m ".gitignore is now working"

Wenn Schritt 2 nicht funktioniert, sollten Sie die gesamte Route der Dateien schreiben, die Sie hinzufügen möchten.

  • @Karen_Wiznia das “git config … _global” erstellt ein globales Gitingore für alle Git-Repos auf dem Computer. Das wollte der OP nicht.

    – ivan7707

    23. Dezember 2015 um 15:57 Uhr

  • Ich wünschte, ich könnte das mehr als einmal mögen, ich komme immer wieder auf diese Frage zurück, um diese Erinnerung zu suchen.

    – Antony D’Andrea

    8. März 2017 um 15:47 Uhr

  • Es sollte “mv git.txt .gitignore” statt “rename git.txt .gitignore” lauten.

    – Ahmad F

    9. Dezember 2017 um 11:21 Uhr

Wenden Sie gitignore auf ein vorhandenes Repository an das bereits
Patrick James McDougle

Wie hier angegeben, können Sie den Index aktualisieren:

git update-index --assume-unchanged /path/to/file

Dadurch werden die Dateien nicht in angezeigt git status oder git diff.

Um die Dateien erneut zu verfolgen, können Sie Folgendes ausführen:

git update-index --no-assume-unchanged /path/to/file

  • Dies ist die bessere Antwort – sie konzentriert sich nur auf die einzelne Datei, die Datei, die nicht vom Repository verfolgt werden soll. Die am höchsten markierte Antwort funktioniert auch, aber sie tut viel mehr, als nur eine Datei vom Tracking durch Git zu ignorieren.

    – Krzysztof Chris Mejka

    7. April 2016 um 7:07 Uhr

  • Das ist ein guter. Aber was, wenn wir ziehen? Gibt es Zusammenführungskonflikte?

    – Pramod

    23. April 2016 um 6:21 Uhr


  • @pramod, tolle Frage. Ich bin mir nicht wirklich sicher. Probieren Sie es in einem abgespeckten Test-Repository aus?

    – Patrick James McDougle

    22. Juni 2016 um 23:25 Uhr

Wenn Sie Ihre hinzugefügt haben .gitignore zu spät, wird git trotzdem bereits festgeschriebene Dateien weiter verfolgen. Um dies zu beheben, können Sie jederzeit alle zwischengespeicherten Instanzen der unerwünschten Dateien entfernen.

Um zunächst zu überprüfen, welche Dateien Sie tatsächlich verfolgen, können Sie Folgendes ausführen:

git ls-tree --name-only --full-tree -r HEAD

Angenommen, Sie haben unerwünschte Dateien in einem Verzeichnis wie gefunden cache/ Daher ist es sicherer, dieses Verzeichnis anstelle aller Ihrer Dateien als Ziel zu verwenden.

Also statt:

git rm -r --cached .

Es ist sicherer, auf die unerwünschte Datei oder das Verzeichnis zu zielen:

git rm -r --cached cache/

Fahren Sie dann fort, um alle Änderungen hinzuzufügen,

git add .

und begehen…

git commit -m ".gitignore is now working"

Referenz: https://amyetheredge.com/code/13.html

Hier ist eine Möglichkeit, alle Dateien zu „untracken“, die sonst unter den aktuellen Ausschlussmustern ignoriert würden:

(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --

Dadurch bleiben die Dateien in Ihrem Arbeitsverzeichnis, werden aber aus dem Index entfernt.

Der hier verwendete Trick besteht darin, eine nicht vorhandene Indexdatei für git ls-files bereitzustellen, sodass angenommen wird, dass keine nachverfolgten Dateien vorhanden sind. Der obige Shell-Code fragt nach allen Dateien, die ignoriert würden, wenn der Index leer wäre, und entfernt sie dann mit git rm aus dem eigentlichen Index.

Nachdem die Dateien „nicht nachverfolgt“ wurden, verwenden Sie git status, um zu überprüfen, ob nichts Wichtiges entfernt wurde (falls dies der Fall ist, passen Sie Ihre Ausschlussmuster an und verwenden Sie git reset –path, um den entfernten Indexeintrag wiederherzustellen). Machen Sie dann einen neuen Commit, der den „Crud“ auslässt.

Der „Müll“ wird immer noch in allen alten Commits sein. Du kannst git filter-branch verwenden, um saubere Versionen der alten Commits zu erzeugen, wenn du wirklich einen sauberen Verlauf benötigst (Achtung: die Verwendung von git filter-branch wird den Verlauf „neu schreiben“, also sollte es nicht leichtfertig unternommen werden, wenn du irgendwelche Mitarbeiter hast, die gezogen haben alle Ihre historischen Commits, nachdem der „Crud“ zum ersten Mal eingeführt wurde).

  • klingt nach einer soliden Lösung 🙂 Ich nehme an, dass dies für die Linux-Shell richtig ist? Leider bin ich Win7-Benutzer. Kann ich das irgendwie in Windows machen?

    – Um versteckte

    29. Oktober 2013 um 16:01 Uhr

1646264289 755 Wenden Sie gitignore auf ein vorhandenes Repository an das bereits
Nedudi

Verwenden git clean

Holen Sie sich Hilfe bei diesem Lauf

git clean -h

Wenn Sie sehen möchten, was zuerst passieren würde, stellen Sie sicher, dass Sie den Schalter -n für einen Probelauf übergeben:

git clean -xn

Gitingnored-Müll entfernen

git clean -xdf

Achtung: Möglicherweise ignorieren Sie lokale Konfigurationsdateien wie database.yml, die ebenfalls entfernt würden. Benutzung auf eigene Gefahr.

Dann

git add .
git commit -m ".gitignore is now working"
git push

  • klingt nach einer soliden Lösung 🙂 Ich nehme an, dass dies für die Linux-Shell richtig ist? Leider bin ich Win7-Benutzer. Kann ich das irgendwie in Windows machen?

    – Um versteckte

    29. Oktober 2013 um 16:01 Uhr

1646264290 270 Wenden Sie gitignore auf ein vorhandenes Repository an das bereits
Roshan Poudyal

Ich denke, dies ist eine einfache Möglichkeit, a hinzuzufügen .gitignorieren Datei in ein vorhandenes Repository.

Voraussetzung:

Sie benötigen einen Browser, um auf Ihr Github-Konto zuzugreifen.

Schritte

  1. Erstellen Sie eine neue Datei in Ihrem gewünschten (bestehenden) Projekt und benennen Sie sie .gitignorieren. Sie erhalten eine Vorschlagsaufforderung für .gitignore-Vorlagen, sobald Sie die Datei als benennen .gitignorieren. Verwenden Sie entweder diese Vorlagen oder verwenden Sie gitignore.io um den Inhalt Ihrer zu generieren ignorieren Datei.
  2. Übernehmen Sie die Änderungen.
  3. Klonen Sie nun dieses Repository.

Habe Spaß!

917320cookie-checkWenden Sie .gitignore auf ein vorhandenes Repository an, das bereits eine große Anzahl von Dateien verfolgt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy