
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 .gitignore
aber 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?

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)
- 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/

Ryan Taylor
Es gibt 3 Optionen; Sie wollen wahrscheinlich Nr. 3
-
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>
-
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>
-
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.

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/exclude
dann 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.

rjha94
Dies ist ein zweistufiger Prozess:
-
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
-
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

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
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.
9871000cookie-checkWie stoppe ich das Tracking und ignoriere Änderungen an einer Datei in Git?yes
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