2068 Stimmen

Wie stoppt man die Verfolgung und ignoriert Änderungen an einer Datei in Git?

Ich habe ein Projekt geklont, das einige .csproj Dateien. Ich brauche/mag meine lokalen csproj Dateien, die von Git nachverfolgt werden (oder beim Erstellen eines Patches angezeigt werden), aber sie werden eindeutig im Projekt benötigt.

Ich habe hinzugefügt *.csproj zu meinem LOKALEN .gitignore aber die Dateien sind bereits in der Repo.

Wenn ich git status eingebe, zeigt es meine Änderungen an csproj die ich nicht im Auge behalten oder für Patches einreichen möchte.

Wie entferne ich das "Tracking" dieser Dateien aus meinem persönlichen Repo (behalte sie aber im Quellcode, damit ich sie verwenden kann), so dass ich die Änderungen nicht sehe, wenn ich einen Status mache (oder einen Patch erstelle)?

Gibt es einen korrekten/kanonischen Weg, diese Situation zu handhaben?

22 Stimmen

Eine sehr nützliche Frage, aber ich bin neugierig, warum Sie nicht die Änderungen an der .csproj Datei, die ein wichtiger Bestandteil eines jeden Projekts ist. Änderungen an der .csproj.user Datei oder eine .Publish.XML Ich kann durchaus verstehen, dass Sie keine Dateien verfolgen wollen, aber ich frage mich, warum Sie nicht auch die .csproj

9 Stimmen

Vielleicht verwenden sie eine andere IDE?

4 Stimmen

Ironischerweise bin ich auf diesen Thread gestoßen, weil ich .suo-Dateien aus einem Repo entfernen, aber lokal behalten möchte. Für die Nachwelt: Bei der .Net-Entwicklung ist es erforderlich, .csproj-Dateien im Repo zu behalten, und diese Änderungen sollten immer nachverfolgt werden, es sei denn, Sie möchten den Zorn anderer Entwickler an Ihrem Projekt spüren. Wenn Sie sich unsicher sind, werfen Sie einen Blick auf das Gitignore Files Repo auf GitHub: github.com/github/gitignore/blob/master/VisualStudio.gitignore

0voto

Eine fast Git-Befehl-freier Ansatz wurde in diesem Antwort :

Zu ignorieren bestimmte Dateien für jedes lokale Repo :

  1. Eine Datei erstellen ~/.gitignore_global z.B. durch touch ~/.gitignore_global in Ihrem Terminal.
  2. ausführen. git config --global core.excludesfile ~/.gitignore_global ausnahmsweise.
  3. Schreiben Sie die Datei-/Verzeichnispfade, die Sie ignorieren wollen, in ~/.gitignore_global . z.B.. modules/*.H die in Ihrem Arbeitsverzeichnis vermutet wird, d. h. $WORK_DIR/modules/*.H .

Zu ignorieren bestimmte Dateien für ein einziges lokales Projektarchiv :

  1. Führen Sie den obigen dritten Schritt für die Datei .git/info/exclude innerhalb des Repo, d.h. schreiben Sie die Datei-/Verzeichnispfade, die Sie ignorieren wollen, in .git/info/exclude . z.B.. modules/*.C die in Ihrem Arbeitsverzeichnis vermutet wird, d. h. $WORK_DIR/modules/*.C .

0voto

Pankaj Sonani Punkte 33

Ich gehe davon aus, dass Sie versuchen, eine einzelne Datei aus Git Tacking zu entfernen. Dafür würde ich den folgenden Befehl empfehlen.

git update-index --assume-unchanged

Beispiel - git update-index --assume-unchanged .gitignore .idea/compiler.xml

0voto

Vraj Pandya Punkte 533

Ich gehe davon aus, dass Sie sich fragen, wie man die ALLE die Dateien in einem bestimmten Ordner oder im Papierkorbordner, anstatt jede Datei einzeln auszuwählen.

Sie können diesen Befehl verwenden:

git rm -r -f /<floder-name>\*

Vergewissern Sie sich, dass Sie sich im übergeordneten Verzeichnis des Verzeichnisses befinden.
Mit diesem Befehl werden alle Dateien, die sich in den Ordnern bin/ oder build/ befinden, rekursiv "gelöscht". Mit dem Wort "löschen" meine ich, dass Git so tut, als seien diese Dateien "gelöscht", und dass diese Dateien nicht mehr verfolgt werden. In Wirklichkeit markiert Git diese Dateien als "gelöscht".

Stellen Sie sicher, dass Sie Ihre .gitignore für kommende Übertragungen bereithalten.
Dokumentation : git rm

-1voto

thearyong Punkte 51

Das Problem kann durch die Reihenfolge des Betriebs verursacht werden. Wenn Sie zuerst die .gitignore-Datei geändert haben und dann git rm --cached xxx, kann es sein, dass Sie weiterhin auf dieses Problem stoßen.

Richtige Lösung

  1. git rm --cached xxx
  2. die .gitignore-Datei geändert

Ordnungsinvariant!

Die .gitignore wird nach der Änderung neu geladen!

-2voto

chinaanihchen Punkte 398

Nach langem Suchen einen Weg finden, dies zu tun. alias ein Git-Befehl in .gitconfig .wie in Android Studio Projekt vor dem Auschecken Zweig revert Konfigurationsdatei und dann überspringen Sie es nach dem Auschecken Zweig verwenden sed die Konfigurationsdatei in meine lokale Konfiguration ändern. checkoutandmodifylocalproperties = !git update-index --no-skip-worktree local.properties && git checkout local.properties && git checkout $1 && git update-index --skip-worktree local.properties && sed -i '' 's/.*sdk.dir.*/sdk.dir=\\/Users\\/run\\/Library\\/Android\\/sdk/g' local.properties && :

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X