Warum schreibt Visual Studio Dateien in meiner .gitignore-Datei fest?

Lesezeit: 7 Minuten

Benutzer-Avatar
Seemann

Ich verwende Visual Studio 2013 Express mit Git für ein Projekt.

Ich habe mein Repository erstellt und die Projektdateien aus einem anderen Verzeichnis hineinkopiert. Ich habe dann meine überprüft .gitignore und .gitattributes Dateien. .gitignore war vorkonfiguriert und schien alles abzudecken, was ich zu diesem Zeitpunkt für Commits ignorieren musste.

Ich habe die Registerkarte „Änderungen“ in Visual Studio unter der Registerkarte „Team Explorer“ ausgewählt und festgestellt, dass alle meine Dateien erwartungsgemäß nicht nachverfolgt wurden. Ich habe dann auf “Alle hinzufügen” geklickt. Ich ging davon aus, dass VS nur Dateien hinzufügen würde, die nicht mit denen in meiner übereinstimmen .gitignore in die Liste “Enthaltene Änderungen”. Stattdessen wurden alle Dateien zur Liste „Enthaltene Änderungen“ hinzugefügt.

Ich dachte dann, dass vielleicht das .gitignore Datei beim Commit verwendet würde und nur Dateien, die nicht mit denen in übereinstimmen .gitignore begangen würden. Also fügte ich eine Commit-Nachricht hinzu und klickte auf „Commit“.

Wenn ich im Dropdown-Menü „Aktionen“ auf der Registerkarte „Änderungen“ die Option „Verlauf anzeigen“ auswähle, wird links neben meiner „Team Explorer“-Ansicht ein Bereich angezeigt, in dem alle von mir vorgenommenen Commits angezeigt werden. Es gibt nur 1 Commit. Wenn ich auf diesen Commit doppelklicke, wird die Registerkarte “Team Explorer” angezeigt Commit 8db34b1c und alle Dateien in meinem Projekt werden dort in der Baumansicht mit aufgelistet [add] nach ihrem Namen.

Zum Beispiel, App_Data/Movies.mdf und App_Data/Movies.ldf aufgeführt sind, obwohl meine .gitignore enthält die Linien

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf

Ich verstehe nicht, wie die .gitignore-Datei hier verwendet wird oder was die Abschnitte “Enthaltene Änderungen”, “Ausgeschlossene Änderungen” oder “Nicht verfolgte Dateien” bedeuten.

Eine Erläuterung des obigen Verhaltens und der Abschnitte wäre wünschenswert.

Bearbeiten–

Ich habe mein .git-Verzeichnis gelöscht, ein neues Repo erstellt, meine Projektdateien erneut hineinkopiert und dann Screenshots von dem gemacht, was ich sehe.

Hier sind Bilder meiner .gitignore-Datei und meiner Registerkarte „Änderungen“.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Es gibt diese SO-Frage und diese msdn-Frage, die zeigt, dass andere Leute anscheinend auch Probleme haben. Ich habe versucht, die von VS hinzugefügte .xml-Datei in meinem .git-Verzeichnis zu löschen (wie in der msdn-Frage angegeben), aber das hat das Problem für mich nicht gelöst.

Bearbeiten 2 —

Dies ist meine aktuelle Verzeichnisstruktur:

/MvcMovie/
    |--.git/
    |
    |---MvcMovie/
    |       |--App_Data/
    |       |     |--Movies.mdf
    |       |     |--Movies.ldf
    |       |     
    |       |--App_Start/
    |       |--etc...
    |
    |--packages/
    |--.gitignore
    |--.gitattributes
    |--MvcMovie.sln
    |MvcMovie.v12.suo

  • Ist Ihr Git-Repo (angezeigt durch die .git Datei) im MvcMovie-Verzeichnis oder über dem MvcMovie-Verzeichnis?

    – Scheinschnittstelle

    10. März 2014 um 10:07 Uhr

  • Mein Git-Repo befindet sich im obersten MvcMovie-Verzeichnis.

    – Seemann

    11. März 2014 um 3:09 Uhr

Benutzer-Avatar
Joel B

@dustinmoris hat Recht mit seiner Antwort, aber die Lösung ist nicht so offensichtlich, wie das Verfahren Sie glauben machen würde. Lassen Sie mich Sie also ausdrücklich durch den Prozess führen, um sicherzustellen, dass die Dateien in Ihrem .gitignore Datei werden von Visual Studio befolgt.

1. Erstellen Sie Ihre Lösung und fügen Sie sie der Quellcodeverwaltung hinzu
Visual Studio 2013-Lösungserstellung

Ich habe ein Muster erstellt MVVM-Licht XAML Solution und Sie können sehen, dass alle derzeit nicht verfolgten Dateien, die idealerweise zum nächsten Commit hinzugefügt werden sollten, mit einem kleinen grünen Plus neben ihren Symbolen angezeigt werden.

Auflistung des Lösungsverzeichnisses

Das Problem ist, dass die MvvmLight.Win81_TemporaryKey.pfx Datei zum Hinzufügen aufgeführt ist, obwohl alle Dateien des Typs .pfx werden ausdrücklich dazu aufgerufen, in my ignoriert zu werden .gitignore.

ignorieren

Dies wird noch deutlicher, wenn ich die Lösung in der auswähle Team Explorer Bedienfeld und wählen Sie dann die aus Changes Taste. Ich sehe eine Liste aller Dateien, deren Aufnahme beim nächsten Commit aussteht.

Team Explorer-Änderungen

Diese Liste enthält jede Datei in der Lösung, nicht nur die durch die angegebene Teilmenge .gitignore Datei.

2. Schließen Sie Visual Studio und löschen Sie die ms-persist.xml Datei

Es befindet sich in einem versteckten Verzeichnis und ist daher schwer zu finden. Es sollte sich auf dem folgenden Pfad befinden

Lösungsverzeichnis\.git\ms-persist.xml

ms-persist.xml-Datei

3. Öffnen Sie die Lösung erneut und übertragen Sie die Dateien

Sie werden feststellen, dass es so aussieht, als ob Ihre Lösung nicht mehr unter Quellcodeverwaltung steht, da alle Symbole ihre grünen Pluszeichen verloren haben, aber keine Sorge, es ist in Ordnung.

Auflistung des Lösungsverzeichnisses nach dem Löschen von ms-persist.xml

Gehen Sie weiter zum Team Explorer Bedienfeld und wählen Sie dann die aus Changes Taste. Auch hier sehen Sie, dass das Projekt immer noch von der Quellcodeverwaltung nachverfolgt wird, sowie eine Liste aller Dateien, die beim nächsten Commit hinzugefügt werden sollen. Noch wichtiger ist, Sie werden feststellen, dass Ihre .gitignore Liste wurde dieses Mal korrekt eingehalten und alle Dateien, die als ignoriert angegeben wurden, werden nicht mehr als ausstehende Änderungen aufgeführt, die dem nächsten Commit hinzugefügt werden sollen. Wie Sie unten sehen können, ist die MvvmLight.Win81_TemporaryKey.pfx Datei ist nicht mehr für den nächsten Commit vorgesehen!

Commit-Änderungen korrigiert

Hoffe das hilft jemandem. Nach all dem Ärger hier mein ehrlicher Rat:

Lernen und verwenden Sie die Befehlszeilenschnittstelle, da sie den gesamten Funktionsumfang von Git bietet und auf allen Plattformen dieselbe Schnittstelle hat.

  • TLDR-Version, löschen .git\ms-persist.xml und starten Sie Visual Studio neu. Danke, das hat geholfen.

    – Jürgen Steinblock

    15. Oktober 2015 um 7:28 Uhr

  • Gute Antwort; vor allem der Schlusssatz. Ich bin zu dem gleichen Schluss gekommen, nachdem ich mit zu vielen sogenannten UIs mit ihren endlosen Macken gekämpft habe.

    – Alfie

    1. März 2016 um 18:04 Uhr

  • Ich habe das selbst gesehen, wo die Anwendung des erwähnten Fixes nicht hängen blieb – Dateien wurden nach einer sauberen Neuerstellung erneut hinzugefügt. Als ich mir .gitignore ansah, fand ich es zu haben UNIX-EOL. Wechseln zu Windows-EOL hat es geschafft.

    – Trond Aarskog

    27. März 2016 um 19:08 Uhr

Falls sich jemand fragt, wie man das beheben kann. Dies ist die Lösung: Gehen Sie zu Ihrem .git-Ordner (möglicherweise versteckt) und öffnen Sie die ms-persist.xml und Sie können die nachverfolgten Dateien, ausgeschlossenen Elemente usw. sehen.

Reparieren Sie einfach manuell, was VS durcheinander gebracht hat, und starten Sie die IDE neu, und Sie sollten wieder gut sein!

Löschen Sie nicht den gesamten .git-Ordner, wie es oft in anderen SO-Threads erwähnt wird!

Danke an Eric Nelsons Blogbeitrag:
https://ericnelson.wordpress.com/2014/06/21/is-visual-studio-2013-ignoring-your-gitignore-file/

AppData/*.mdf und AppData/*.ldf beziehen auf .mdf und .ldf Dateien, die im vorhanden sind AppData Verzeichnis, das sich im Stamm Ihres Git-Repositorys befindet.

Dein AppData Verzeichnis existiert tatsächlich unter dem MvcMovie Verzeichnis. Du kannst hinzufügen:

MvcMovie/AppData/*.mdf
MvcMovie/AppData/*.ldf`

zu deinem .gitignore um diese spezifischen Dateien zu ignorieren, oder, wenn Sie die ignorieren möchten .mdf und .ldf Verzeichnisse hinein alle AppData Ordner in Ihrem Repository:

**/AppData/*.mdf
**/Appdata/*.ldf

  • Angesichts dessen, wie Visual Studio die .gitignore-Datei einrichtet, wie sollte ich meine Repos und/oder Projekte erstellen, damit ich die .gitignore-Datei nicht bei jedem neuen Projekt anpassen muss. Zum Beispiel gibt es eine Zeile !packages/*/build/ die anscheinend auf meinen Paketordner abzielt, sich aber auf derselben Verzeichnisebene befindet wie der Projektordner und die .gitignore-Datei, was bedeutet (wenn ich das richtig lese) die App_Data/*.mdf-Zeile würde nicht so zutreffen, wie sie derzeit ist.

    – Seemann

    11. März 2014 um 2:46 Uhr

Wenn Sie die Spezifikationen der SQL-Datenbankdatei in der .git-Datei ändern zu:

# SQL Server files
*.mdf
*.ldf

Würde das nicht alle SQL-Datenbankdateien in der gesamten Lösungsordnerstruktur ignorieren, egal in welchem ​​Unterordner sie gefunden wurden?

Benutzer-Avatar
Jess

  1. Im Team-Explorergehen Sie zu Ihrer Lösung und dann zur Änderungsansicht.
  2. Wählen Sie die dummen Dateien aus, die Sie ausschließen möchten.
  3. Rechtsklick und auswählen Ignorieren Sie diese Erweiterung.
    Team Explorer – Ignorieren Sie diese Erweiterung
  4. Sie werden sehen, dass Änderungen an der .gitignore-Datei vorgenommen wurden, die Sie jetzt festschreiben können.

.gitignorieren

*.ldf
*.mdf

Oder Sie können das Ignorieren dieses lokalen Elements verwenden, um nur dieses bestimmte Element zu ignorieren, wenn Sie eine Erweiterung nicht vollständig ignorieren möchten.

1217100cookie-checkWarum schreibt Visual Studio Dateien in meiner .gitignore-Datei fest?

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

Privacy policy