Wie stoppe ich das Tracking und ignoriere Änderungen an einer Datei in Git?

Lesezeit: 10 Minuten

Wie stoppe ich das Tracking und ignoriere Anderungen an einer
Josua Ball

Ich habe ein Projekt geklont, das einige enthält .csproj Dateien. Ich brauche/mag mein Lokal nicht csproj Dateien, die von Git verfolgt werden (oder beim Erstellen eines Patches aufgerufen werden), aber sie werden eindeutig im Projekt benötigt.

Ich habe hinzugefügt *.csproj zu meinem LOKAL .gitignoreaber die Dateien befinden sich bereits im Repo.

Wenn ich git status eingebe, werden meine Änderungen an angezeigt csproj die ich nicht verfolgen oder für Patches einreichen möchte.

Wie entferne ich das „Tracking“ dieser Dateien aus meinem persönlichen Repo (aber behalte sie in der Quelle, damit ich sie verwenden kann), damit ich die Änderungen nicht sehe, wenn ich einen Status mache (oder einen Patch erstelle)?

Gibt es einen korrekten/kanonischen Weg, um mit dieser Situation umzugehen?

  • Eine sehr nützliche Frage, aber ich bin neugierig, warum Sie Änderungen an der nicht nachverfolgen möchten .csproj Datei, die ein sehr wichtiger Teil jedes Projekts ist. Änderungen an der .csproj.user Datei oder irgendeine .Publish.XML Ich kann absolut verstehen, dass Dateien nicht verfolgt werden, aber ich bin gespannt, warum Sie die Dateien nicht verfolgen möchten .csproj

    – Owen Blacker

    3. Mai 2012 um 10:26 Uhr


  • Vielleicht verwenden sie eine andere IDE?

    – Jarrett

    2. April 2013 um 1:17 Uhr

  • Ironischerweise kam ich zu diesem Thread, weil ich .suo-Dateien aus einem Repo entfernen, aber lokal aufbewahren möchte. Für die Nachwelt erfordert die .Net-Entwicklung, dass Sie .csproj-Dateien im Repo aufbewahren, und diese Änderungen sollten immer nachverfolgt werden, es sei denn, Sie möchten den Zorn anderer Entwickler auf Ihr Projekt spüren. Wenn Sie sich jemals unsicher sind, werfen Sie einen Blick auf das gitignore files Repo auf GitHub: github.com/github/gitignore/blob/master/VisualStudio.gitignore

    – Langda

    22. September 2013 um 20:39 Uhr

  • @Cupcake, die Frage, auf die du verlinkt hast, wurde 15 Tage nach dieser geschrieben? Vielleicht fällt Ihnen noch eine andere ein?

    – stephenmurdoch

    16. Juni 2014 um 9:36 Uhr

  • @marflar kanonische Fragen müssen nicht unbedingt die sein älteste diejenigen, nur die Beste Einsen. Die, die ich verlinkt habe, hat 20 Antworten, während diese nur 5 hat.

    Benutzer456814

    16. Juni 2014 um 16:11 Uhr

1646900893 574 Wie stoppe ich das Tracking und ignoriere Anderungen an einer
Antonius

Einfach anrufen git rm --cached für jede der Dateien, die Sie aus der Revisionskontrolle entfernen möchten, sollte in Ordnung sein. Solange Ihre lokalen Ignoriermuster korrekt sind, werden diese Dateien nicht in der Ausgabe von git status enthalten sein.

Beachten Sie, dass diese Lösung die Dateien aus dem Repository entfernt, sodass alle Entwickler ihre eigenen lokalen (nicht revisionskontrollierten) Kopien der Datei pflegen müssten

Um zu verhindern, dass git Änderungen in diesen Dateien erkennt, sollten Sie auch diesen Befehl verwenden:

git update-index --assume-unchanged [path]

Was Sie wahrscheinlich tun möchten: (von unten @Ryan Taylor Antwort)

  1. Damit teilen Sie git mit, dass Sie Ihre eigene unabhängige Version der Datei oder des Ordners haben möchten. Beispielsweise möchten Sie Produktions-/Staging-Konfigurationsdateien nicht überschreiben (oder löschen).

git update-index --skip-worktree <path-name>

Die vollständige Antwort finden Sie hier in dieser URL: http://source.kohlerville.com/2009/02/untrack-files-in-git/

  • “git rm –cached ” würde aus der Versionskontrolle entfernen, während es im Arbeits-Repository bleibt. Ob es das ist, was Sie wollen …

    – Jakub Narębski

    2. Juni 2009 um 0:03 Uhr

  • Aber wenn andere das Repository ziehen, wird ihre eigene *.csproj-Datei entfernt? Denn wenn wir wollen, dass die Datei nicht verfolgt, aber nicht gelöscht wird.

    – FMaz008

    1. Juni 2011 um 13:07 Uhr

  • Wenn Sie versuchen, ALLE Dateien in einem Verzeichnis zu entfernen, kombinieren Sie es mit git ls-files: git ls-files | xargs git rm --cached — das alles aus dem Git-Index in einem bestimmten Verzeichnis entfernt, ohne die eigentlichen Dateien zu löschen.

    – Marco

    10. November 2011 um 19:51 Uhr

  • git rm --cached -r <dir> arbeitet rekursiv mit einem Ordner und allen darin enthaltenen Dateien.

    – Christa K

    15. Februar 2013 um 1:29 Uhr

  • Dadurch wird die Verfolgung der Datei beendet, sie wird lokal aufbewahrt, aber dafür gesorgt, dass sie gespeichert wird gelöscht für alle die ziehen

    – Eduard Newell

    14. Februar 2014 um 0:58 Uhr

Wie stoppe ich das Tracking und ignoriere Anderungen an einer
Ryan Taylor

Es gibt 3 Optionen; Sie wollen wahrscheinlich Nr. 3

  1. Dadurch bleibt die lokale Datei für Sie erhalten, sie wird jedoch für alle anderen gelöscht, wenn sie ziehen.

    git rm --cached <file-name> oder git rm -r --cached <folder-name>

  2. Dies dient der Optimierung, wie ein Ordner mit einer großen Anzahl von Dateien, z. B. SDKs, die sich wahrscheinlich nie ändern werden. Es weist Git an, diesen riesigen Ordner nicht mehr jedes Mal auf lokale Änderungen zu überprüfen, da es keine geben wird. Die assume-unchanged Der Index wird zurückgesetzt und die Datei(en) überschrieben, wenn Upstream-Änderungen an der Datei/dem Ordner vorgenommen wurden (beim Pullen).

    git update-index --assume-unchanged <path-name>
    
  3. Dies soll Git mitteilen, dass Sie Ihre möchten eigene unabhängige Version der Datei oder des Ordners. Beispielsweise möchten Sie Produktions-/Staging-Konfigurationsdateien nicht überschreiben (oder löschen).

    git update-index --skip-worktree <path-name>
    

    Es ist wichtig, das zu wissen git update-index wird sich nicht ausbreiten mit Git, sodass jeder Benutzer es unabhängig ausführen muss.

  • Diese Antwort ist die vollständigste – sie bietet verschiedene Lösungen mit den jeweiligen Auswirkungen. Der spezielle Fall, mit dem ich arbeite, hat ein Passwort, das in eine Konfigurationsdatei eingebettet ist. Ich möchte eine Vorlagendatei verbreiten und dann das Passwort zu meiner Kopie hinzufügen. Die Kopie mit dem Passwort sollte ignoriert und nicht überschrieben werden.

    – bmacnaughton

    20. November 2016 um 16:23 Uhr

  • Wie kann ich in meinem Lokal überprüfen, welche Dateien für ‘assume-unchanged’ oder ‘skip-worktree’ gelten?

    – Supawat Pusavanno

    19. September 2017 um 1:44 Uhr

  • @SupawatPusavanno, um zu sehen, welche Dateien Sie zuvor für „Unverändert annehmen“ oder „Arbeitsbaum überspringen“ ausgewählt haben, sehen Sie sich diese Antwort an stackoverflow.com/questions/42363881/… – es verwendet grep und git ls-files

    – Ryan Taylor

    19. September 2017 um 17:15 Uhr

  • Sehr gute Antwort. Aber git löst einen Fehler aus, wenn ich versuche, zu einem anderen Zweig zu wechseln: Fehler: “Ihre lokalen Änderungen an den folgenden Dateien würden durch das Auschecken überschrieben werden …..” und die Lösung besteht darin, die Änderungen vor dem Wechseln zu verstauen und zu entstashen, wenn Sie kommen zurück in die Filiale.

    – PhantomReferenz

    13. Dezember 2017 um 5:28 Uhr


  • @RyanTaylor ist es möglich, Ihre eigene lokale Version der Datei beizubehalten, ohne Ihre eigenen Änderungen zu übertragen, während Sie dennoch Änderungen abrufen, die an das Repo übertragen werden?

    – Marc Sloth Eastman

    18. Mai 2021 um 21:17 Uhr

1646900896 72 Wie stoppe ich das Tracking und ignoriere Anderungen an einer
araqnid

Wenn Sie tun git update-index --assume-unchanged file.csproj, git überprüft file.csproj nicht automatisch auf Änderungen: Dadurch werden sie nicht mehr im Git-Status angezeigt, wenn Sie sie ändern. Sie können also alle Ihre .csproj-Dateien auf diese Weise markieren – obwohl Sie alle neuen, die Ihnen das Upstream-Repo sendet, manuell markieren müssen. (Wenn Sie sie in Ihrem haben .gitignore oder .git/info/excludedann werden die von Ihnen erstellten ignoriert)

Ich bin mir nicht ganz sicher, was .csproj-Dateien sind … wenn sie etwas in der Art von IDE-Konfigurationen sind (ähnlich den .eclipse- und .classpath-Dateien von Eclipse), dann würde ich vorschlagen, dass sie einfach niemals quellgesteuert sein sollten alle. Auf der anderen Seite, wenn sie Teil des Build-Systems sind (wie Makefiles), dann sollten sie das natürlich tun — und eine Möglichkeit, optionale lokale Änderungen (z. B. von einer local.csproj a la config.mk) aufzunehmen, wäre nützlich : Unterteilen Sie den Aufbau in globale Teile und lokale Überschreibungen.

  • csproj ist eine C#-Projektdatei, die nachverfolgt, welche Dateien in Ihrem Projekt und einigen anderen Konfigurationen enthalten sind. Sie MUSS quellcodegesteuert sein, damit das Projekt funktioniert

    – Funke

    4. Dezember 2013 um 15:20 Uhr

  • Dies ist die einzig richtige Antwort hier! Ich verwende @araqnids answer seit Jahren und es funktioniert genau wie gewünscht, um dieses Problem zu lösen.

    – NHDaly

    27. Mai 2014 um 4:31 Uhr

  • Gibt es eine Möglichkeit zu erkennen, dass dies für eine Datei durchgeführt wurde oder für welche Dateien dies in einem Repo durchgeführt wurde? Ich bin ein bisschen nervös, weil ich vergesse, dass ich das getan habe, und mich dann frage, warum zum Teufel diese Datei später nicht aktualisiert wird!

    – GreenAsJade

    27. November 2014 um 2:41 Uhr

  • @GreenAsJade: git ls-files -v zeigt Dateien, die als unverändert angenommen werden, mit einem Kleinbuchstaben an (z h statt üblich H für zwischengespeicherte Dateien).

    – Amadan

    27. November 2014 um 3:42 Uhr


  • Danke – diese kleine Perle verdient fast eine eigene Frage! … erledigt stackoverflow.com/questions/27162966/…

    – GreenAsJade

    27. November 2014 um 4:12 Uhr


Wie stoppe ich das Tracking und ignoriere Anderungen an einer
rjha94

Dies ist ein zweistufiger Prozess:

  1. Entfernen Sie die Nachverfolgung von Dateien/Ordnern – aber behalten Sie sie auf der Festplatte – mit

    git rm --cached 
    

    Jetzt werden sie nicht mehr als “geändert” angezeigt, aber immer noch als angezeigt

        untracked files in  git status -u  
    
  2. Fügen Sie sie hinzu .gitignore

Die akzeptierte Antwort hat bei mir immer noch nicht funktioniert

ich benutzte

git rm -r –cached .

git hinzufügen.

git commit -m “.gitignore reparieren”

Antwort von gefunden Hier

  • Dieser Link ist sehr nützlich, insbesondere um alle Dateien in der .gitignore rekursiv zu entfernen

    – rmcsharry

    13. April 2016 um 10:44 Uhr

  • Ich bin 3 Mal hierher zurückgekehrt, hoffentlich kann ich mich vor dem nächsten Mal daran erinnern!

    – Harry Bosch

    20. April 2016 um 1:09 Uhr

  • Der Kommentar von @Edward Newell wie in der obigen Antwort gilt auch hier: “Dies wird die Datei aus dem Tracking entfernen, sie lokal aufbewahren, aber dafür sorgen, dass es für jeden gelöscht wird, der zieht“.

    – ToJo

    5. Mai 2020 um 20:17 Uhr


1646900897 935 Wie stoppe ich das Tracking und ignoriere Anderungen an einer
Gangnus

Sie haben Ihre .gitignore-Datei vergessen?

Wenn Sie das gesamte Projekt lokal haben, aber vergessen haben, Git Ignore hinzuzufügen, und jetzt einige unnötige Dateien verfolgen, verwenden Sie diesen Befehl, um alles zu entfernen

git rm --cached -r .

Stellen Sie sicher, dass Sie sich an der Wurzel des Projekts befinden.

Dann können Sie das Übliche tun

Addieren

git add .

Begehen

git commit -m 'removed all and added with git ignore'

Drücken

git push origin master

Fazit

Hoffe, das hilft Leuten, die Änderungen an ihrem vornehmen müssen .gitignore oder alles zusammen vergessen.

  • Es entfernt den gesamten Cache
  • Betrachtet Ihre .gitignore
  • Fügt die Dateien hinzu, die Sie verfolgen möchten
  • Pusht zu Ihrem Repo

  • Dieser Link ist sehr nützlich, insbesondere um alle Dateien in der .gitignore rekursiv zu entfernen

    – rmcsharry

    13. April 2016 um 10:44 Uhr

  • Ich bin 3 Mal hierher zurückgekehrt, hoffentlich kann ich mich vor dem nächsten Mal daran erinnern!

    – Harry Bosch

    20. April 2016 um 1:09 Uhr

  • Der Kommentar von @Edward Newell wie in der obigen Antwort gilt auch hier: “Dies wird die Datei aus dem Tracking entfernen, sie lokal aufbewahren, aber dafür sorgen, dass es für jeden gelöscht wird, der zieht“.

    – ToJo

    5. Mai 2020 um 20:17 Uhr


Wie in anderen Antworten erwähnt, ist die ausgewählte Antwort falsch.

Die Antwort auf eine andere Frage deutet darauf hin, dass möglicherweise Skip-Worktree erforderlich wäre.

git update-index --skip-worktree <file>

Diese Antwort verlinkt auf einen Artikel (http://fallengamer.livejournal.com/93321.html) und zitiert den Artikel mit einer schönen Zusammenfassung des Unterschieds zwischen –assume-unchanged und –skip-worktree wie folgt:

–annehmen-unverändert geht davon aus, dass ein Entwickler eine Datei nicht ändern sollte. Dieses Flag soll die Leistung für sich nicht ändernde Ordner wie SDKs verbessern.

–skip-worktree ist nützlich, wenn Sie git anweisen, eine bestimmte Datei niemals anzufassen, weil Entwickler sie ändern sollten. Wenn zum Beispiel das Haupt-Repository Upstream einige produktionsbereite Konfigurationsdateien hostet und Sie nicht versehentlich Änderungen an diesen Dateien festschreiben möchten, ist –skip-worktree genau das, was Sie wollen.

Alle Anerkennung geht an Borealid für ihre Recherche und Antwort. Fügen Sie diese Informationen hier rein aus Gründen der Bequemlichkeit für andere hinzu.

  • Nein nicht wirklich: --skip-worktree wird benutzt um Behalten Sie die Datei im Repository, aber hören Sie auf, ihre Änderungen zu verfolgen. Wie deine Antwort sagt: –skip-worktree ist nützlich, wenn Sie git anweisen, eine bestimmte Datei niemals zu berühren, weil Entwickler sollte ändern Sie es

    – Erdal G.

    9. November 2015 um 12:29 Uhr


  • @ErdalG. Exakt. Gemäß der Frage möchten sie alle Änderungen in der Datei ignorieren, aber die Datei im Repo behalten

    – der_neue_mr

    31. August 2016 um 11:05 Uhr

  • Stimme @the_new_mr zu, --assume-unchanged und --skip-worktree haben eine ähnliche Wirkung, aber ihre Zwecke sind völlig unterschiedlich. Ersteres dient dazu, die Git-Leistung zu beschleunigen, indem Git getäuscht wird bestimmte Dateien nicht zu überprüfenwährend letzteres für ist Ignorieren zukünftiger Änderungen an bestimmten Dateiendie für die Laufzeit geeignet sind, aber wichtige Dateien.

    – Viktor Wong

    15. September 2016 um 4:00 Uhr

987100cookie-checkWie stoppe ich das Tracking und ignoriere Änderungen an einer Datei in Git?

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

Privacy policy