GIT - .suo-Datei kann nicht ignoriert werden

84

Ich versuche, mit Git in einer in C # geschriebenen Anwendung mit Git zu arbeiten.

Wir haben den Eintrag "project1.suo" zur .gitignore-Datei hinzugefügt, aber jedes Mal, wenn einer von uns das Projekt festschreiben muss, scheint Git uns zu sagen, dass wir auch die Datei "project1.suo" festschreiben sollen.

Wir haben viele Methoden ausprobiert, um die Datei in .gitignore folgendermaßen hinzuzufügen:

*.suo
project1.suo
c:\project\project1.suo

Wir können dieses Problem nicht beheben.

Laxedur
quelle
2
Wird die .gitignore-Datei dem Repo selbst hinzugefügt?
Steve B
Ja, ist im Repository
Laxedur
3
Ich denke, die Datei wurde einmal hinzugefügt. Versuchen Sie es explizit mit einem Git rm für diese Datei, schreiben Sie fest und prüfen Sie, ob sie noch als hinzugefügte Datei vorgeschlagen wird.
Steve B
Kannst
@SteveB .gitignore muss nicht zum Repository hinzugefügt werden, um wirksam zu werden.
Ikke

Antworten:

165

git ignoriert keine Dateien, die dem Repository hinzugefügt wurden. Wenn Sie es ignorieren möchten, müssen Sie die Datei aus dem Repository löschen:

git rm --cached project1.suo
git commit -m "Delete suo file from repository"

Dadurch wird die Datei aus dem Repository gelöscht, solange sie sich noch auf Ihrer Festplatte befindet.

Ikke
quelle
Wenn Sie die * .suo-Dateien speichern, werden diese Dateien sicherlich nicht remote übertragen. Wird es das Problem für die Person verursachen, die dieses Projekt klont?
Waqas
Wenn Sie den Visual Studio-Client verwenden, gibt es keine Möglichkeit, dies von dort aus zu tun. Sie müssen die cmd-Shell verwenden. Wenn ich jedoch den Befehl rm aus der Shell verwenden würde, würde ich die .suo-Datei mit einem Durchgestrichen sehen, aber wenn ich die Änderung über die VS-Benutzeroberfläche festschreiben würde, würde sie erneut angezeigt. Sie müssen beide oben genannten Befehle über die Befehlszeile ausführen.
Michael Blackburn
1
@Waqas nein, Visual Studio erstellt nur eine neue Datei für sie. In diesem Fall ist der .gitignore wichtig, der * .suo als Teil des Repositorys ausschließt. Wenn sie sich verpflichten, verhindert der von ihnen ausgecheckte .gitignore, dass sie ihre eigene SUO-Datei einchecken (oder zumindest davon abhalten).
Michael Blackburn
3
Dies ist für einige neue Leute möglicherweise nicht offensichtlich. Das hat wie ein Zauber gewirkt. Um diesen Befehl ausführen zu können, müssen Sie sich in dem Ordner befinden, in dem sich die .suo befindet. Der erste Befehl, den Sie in cmd.exe ausführen müssen, lautet "Verzeichnis ändern". CD <Geben Sie den vollständigen Pfad zum Stammordner von .suo ein. Drücken Sie dann die Eingabetaste. Standardmäßig wird möglicherweise nicht der .vs-Ordner angezeigt, in dem sich die .suo befindet Versteckte Dateien sind in Ihrem Repository-Ordner root aktiviert. Meine Datei hatte keinen Projektnamen. Nur die Erweiterung. git rm --cached .suo git commit -m "Suo-Datei aus dem Repository
löschen
Wenn Sie den Ordner ignorieren müssen, befindet er sich bereits im Remote-Repo. Verwenden Sie die Option -r im Befehl git rm -r --cached <Pfad zum Ordner>
Somnath Kadam
3

Ich kehre immer zu dieser Frage zurück, um die Methode in der Antwort zu verwenden, aber ich habe eine bessere Lösung gefunden, die darin besteht, die Änderungen an dieser Datei zu ignorieren. Die Methode ist

git update-index --assume-unchanged project1.suo

oder

git update-index --assume-unchanged .vs/config/applicationhost.config

Um dies rückgängig zu machen, verwenden Sie --no-accept-unverändert

Tareq
quelle
Ich erhalte die Meldung "Schwerwiegend: Datei Web <Verzeichnis> / <Dateiausschluss> kann nicht markiert werden"
dancerjude
Beachten Sie, dass dies zu Problemen führt, wenn jemand die Datei aktualisiert. Git wird versuchen, die Datei zu aktualisieren, stellt jedoch fest, dass sie geändert wurde, und gibt eine Fehlermeldung aus. In jedem Fall --skip-worktreeist besser als --assume-unchanged, was nur aus Leistungsgründen verwendet werden sollte.
Ikke
-4

Ich hatte das gleiche Problem. Die Lösung von Ikke hilft, aber vergessen Sie nicht, den Eintrag * .suo aus Ihrem .gitignore zu entfernen, falls vorhanden. Nachdem die Datei korrigiert wurde, tun Sie dies

git add **/*.suo
Tsvetelina Tsvetanska
quelle
1
Die .suo sollte NICHT aus .gitignore entfernt werden, um die Anforderungen des OP zu erfüllen.
Caltor