Frage Wie kann ich die Verfolgung von Änderungen an einer Datei in Git stoppen und ignorieren?


Ich habe ein Projekt geklont, das einige enthält .csproj Dateien. Ich brauche / mag meinen Einheimischen nicht csproj Dateien, die von Git nachverfolgt werden (oder beim Erstellen eines Patches angesprochen werden), werden jedoch im Projekt benötigt.

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

Wenn ich den git-Status eingib, werden meine Änderungen angezeigt csproj an denen ich nicht interessiert bin.

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 eine korrekte / kanonische Art, mit dieser Situation umzugehen?


1429
2018-06-01 19:08


Ursprung


Antworten:


Einfach anrufen git rm --cached auf jede der Dateien, die Sie aus der Versionskontrolle entfernen möchten, sollte in Ordnung sein. Solange Ihre lokalen Ignoriermuster korrekt sind, sehen Sie diese Dateien nicht in der Ausgabe von git status.

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

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

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

Was du wahrscheinlich machen willst: (von unten @Ryan Taylor Antwort)

  1. Dies bedeutet, dass Sie Ihre eigene unabhängige Version der Datei oder des Ordners wünschen. Zum Beispiel möchten Sie nicht überschreiben (oder löschen)   Produktions- / Staging-Konfigurationsdateien.

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/


1795
2018-06-01 19:16



Wenn Sie tun git update-index --assume-unchanged file.csproj, git prü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. Sie müssen jedoch alle neuen Dateien, die Ihnen der Upstream-Repo sendet, manuell markieren. (Wenn Sie sie in Ihrem haben .gitignore oder .git/info/exclude, dann werden diejenigen, die du erstellst, ignoriert)

Ich bin mir nicht ganz sicher, was .csproj-Dateien sind ... wenn sie etwas mit IDE-Konfigurationen zu tun haben (ähnlich den Eclipse-Dateien .eclipse und .classpath), würde ich vorschlagen, dass sie niemals von der Quelle gesteuert werden alle. Auf der anderen Seite, wenn sie Teil des Build-Systems sind (wie Makefiles), dann sollten sie eindeutig --- und eine Möglichkeit, optionale lokale Änderungen (zB von einem lokalen.csproj a la config.mk) aufzunehmen, nützlich sein : Unterteilen Sie den Aufbau in globale Teile und lokale Überschreibungen.


223
2018-06-01 19:24



Dies ist ein zweistufiger Prozess:

  1. Entfernen Sie die Verfolgung von Datei / Ordner - aber behalten Sie sie auf der Festplatte - mit

    git rm --cached 
    

    Jetzt erscheinen sie nicht als "verändert", sondern zeigen immer noch als

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


135
2017-08-02 14:25



Es gibt 3 Optionen, wahrscheinlich möchten Sie # 3

1. Dies behält die lokale Datei für Sie bei, löscht sie aber für alle anderen, wenn sie ziehen.

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

2. Dies ist für die Optimierung wie ein Ordner mit einer großen Anzahl von Dateien, z. SDKs, die sich wahrscheinlich nie ändern werden. Es sagt Git, den großen Ordner jedes Mal für Änderungen zu überprüfen, da es keine hat.

git update-index --assume-unchanged <path-name>

3. Dies bedeutet, dass Sie Ihre eigene unabhängige Version der Datei oder des Ordners wünschen. Beispielsweise möchten Sie keine Produktions- / Staging-Konfigurationsdateien überschreiben (oder löschen).

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

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


108
2017-10-26 21:18



Die angenommene Antwort funktionierte immer noch nicht für mich

ich benutzte

git rm -r --cachiert.

Git hinzufügen.

git commit -m "fixieren .gitignore"

Fand die Antwort von Hier 


78
2017-09-18 05:44



Haben Sie Ihr .gitignore vergessen?

Wenn Sie das gesamte Projekt lokal haben, aber vergessen haben, Ihnen git ignore hinzuzufügen und nun einige unnötige Dateien zu verfolgen, verwenden Sie diesen Befehl, um alles zu entfernen

git rm --cached -r .

stellen Sie sicher, dass Sie die Wurzel des Projekts sind.

Dann können Sie das Übliche tun

Hinzufügen

git add .

Verpflichten

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

drücken

git push origin master

Fazit

Hoffe, das hilft Menschen, die Änderungen an ihren vornehmen müssen .gitignore oder vergaß alles zusammen.

  • Es entfernt den gesamten Cache
  • Sieht dein .gitignore an
  • Fügt die Dateien hinzu, die Sie verfolgen möchten
  • Stößt zu Ihrem Repo

37
2017-11-04 10:25



Um Zeit zu sparen, können die Regeln, die Sie zu Ihrem .gitignore hinzufügen, zum Entfernen mehrerer Dateien / Ordner verwendet werden, d. H.

git rm --cached app/**/*.xml

oder

git rm --cached -r app/widgets/yourfolder/

etc.


20
2017-11-07 13:18



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

Das Antworten zu einer anderen Frage deutet darauf hin, dass es möglicherweise überspringen-worktree wäre.

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

20
2018-05-12 11:33