Wie kann ich die Verfolgung von Änderungen an einer Datei in Git stoppen und ignorieren?
Habe ich geklont, ein Projekt, dass beinhaltet einige .csproj
- Dateien. Brauche ich nicht/wie meine lokalen csproj
Dateien, die von Git verwaltet (oder gebracht wird, bis Sie beim erstellen einer patch), aber klar, Sie sind im Projekt.
Habe ich Hinzugefügt *.csproj
zu meinem LOKALEN .gitignore
, aber die Dateien sind schon in der repo.
Geben, wenn ich git status, es zeigt meine änderungen an csproj
die ich bin nicht daran interessiert verfolgen oder die übermittlung für die patches.
Wie Entferne ich die "Verfolgung" diese Dateien aus meinem persönlichen repo (aber halten Sie in der Quelle, so dass ich Sie verwenden kann), so dass ich nicht sehen, die änderungen, wenn ich einen status (oder erstellen Sie einen patch)?
Gibt es eine richtige/übliche Weg, um mit dieser situation umzugehen?
.csproj
- Datei, die ist sehr viel ein wichtiger Bestandteil eines jeden Projekts. Änderungen an der .csproj.Benutzer
- Datei oder eine .Publish.XML
- Dateien kann ich Total verstehen, nicht verfolgen, aber ich bin fasziniert, warum Sie würde nicht wollen, zu verfolgen, die .csproj
... InformationsquelleAutor der Frage Joshua Ball | 2009-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur zum telefonieren
git rm --cached
auf jede der Dateien, die Sie möchten, entfernen aus Versionskontrolle sollte in Ordnung sein. So lange, wie Sie Ihre lokale ignorieren Muster korrekt sind, werden Sie nicht sehen, diese Dateien enthalten in der Ausgabe von git status.Beachten Sie, dass diese Lösung entfernt die Dateien aus dem repository, so dass alle Entwickler halten müssen, um Ihre eigenen lokalen (nicht-revision kontrolliert) Kopien der Datei
Um zu verhindern, dass git von der Erkennung der änderungen in diesen Dateien sollten Sie ebenfalls diesen Befehl verwenden:
, Was Sie wahrscheinlich tun möchten: (von unten @Ryan Taylor beantworten)
Die vollständige Antwort finden Sie hier in dieser URL: http://source.kohlerville.com/2009/02/untrack-files-in-git/
InformationsquelleAutor der Antwort anthony
Wenn Sie
git update-index --assume-unchanged file.csproj
git nicht überprüfen Sie die Datei.csproj änderungen automatisch: das wird verhindern, dass Sie kommen bis in den git-status, Wann immer Sie Sie ändern. So können Sie markieren alle Ihre .csproj Dateien, die auf diese Weise - obwohl, müssen Sie manuell markieren neue, dass die upstream-repo sendet. (Wenn Sie haben Sie in Ihrem.gitignore
oder.git/info/exclude
, dann diejenigen, die Sie erstellen, werden ignoriert)Ich bin mir nicht ganz sicher, was .csproj-Dateien sind... wenn Sie etwas entlang der Linien von IDE-Konfigurationen (ähnlich wie Eclipse .eclipse und .classpath-Dateien), dann würde ich vorschlagen, Sie sollte einfach nie sein Quelle-gesteuert. Auf der anderen Seite, wenn Sie sind Teil des build-Systems (wie z.B. Makefiles) dann ist klar, Sie sollten--- und ein Weg, um abholen optionale lokale änderungen (z.B. von einem lokalen.csproj a la config.mk) nützlich wäre: teilen Sie das bauen in Globale Teile-und lokale überschreibt.
InformationsquelleAutor der Antwort araqnid
Dies ist ein zwei-Schritt-Prozess:
Entfernen der Nachverfolgung von Datei - /Ordner - aber halten Sie diese auf der Festplatte - mit
Jetzt Sie anzeigen nicht als "geändert", aber immer noch zeigen, wie
Fügen Sie Sie zu
.gitignore
InformationsquelleAutor der Antwort rjha94
Es gibt 3 Optionen, werden Sie wahrscheinlich wollen, #3
1. Dies wird die lokale Datei, sondern löschen Sie ihn für jemand anderes, wenn Sie ziehen.
git rm --cached <file-name>
odergit rm -r --cached <folder-name>
2. Dies ist für die Optimierung, wie ein Ordner mit einer großen Anzahl von Dateien, z.B. SDKs, die wahrscheinlich nie ändern. Es erzählt git zu stoppen, überprüfen Sie, dass große Ordner jeder Zeit für Veränderungen, da Sie nicht jeder haben.
3. Dies ist zu sagen, git Sie möchten Ihre eigene unabhängige version der Datei oder des Ordners. Zum Beispiel, Sie wollen nicht zu überschreiben (oder löschen) Produktion/staging-config-Dateien.
Ist es wichtig zu wissen, dass
git update-index
nicht weitergegeben wird mit git, und jeder Benutzer wird unabhängig.InformationsquelleAutor der Antwort Ryan Taylor
Akzeptierte Antwort noch nicht für mich arbeiten
Ich verwendet
Fand die Antwort von hier
InformationsquelleAutor der Antwort Buddhika Hasthanayake
Vergessen .gitignore?
Wenn Sie das gesamte Projekt lokal aber vergaß hinzuzufügen, Sie git ignorieren und sind jetzt verfolgen einige unnötige Dateien mit diesem Befehl entfernen Sie alles, was
stellen Sie sicher, Sie sind die Wurzel des Projekts.
Dann können Sie nicht den üblichen
Hinzufügen
Begehen
Push
Abschluss
Hoffe, das hilft Menschen, die änderungen an Ihren
.gitignore
haben oder vergessen haben es alle zusammen.InformationsquelleAutor der Antwort Joe Lloyd
Sparen einige Zeit die Regeln, die Sie hinzufügen, um Ihre .gitignore kann verwendet werden zum entfernen mehrere Dateien/Ordner, d.h.
git rm --cached app/**/*.xml
oder
git rm --cached -r app/widgets/yourfolder/
e.t.c.
InformationsquelleAutor der Antwort Peter
Wie schon in anderen Antworten, die ausgewählte Antwort falsch ist.
Den Antwort zu der weiteren Frage lässt vermuten, dass es die skip-worktree, die erforderlich wäre.
InformationsquelleAutor der Antwort the_new_mr
Viele Menschen, die Ratschläge, die Sie verwenden
git update-index --assume-unchanged
. In der Tat, dies kann eine gute Lösung sein, aber nur kurzfristig.Was Sie wahrscheinlich tun möchten, ist dieser:
git update-index --skip-worktree
.(Die Dritte option, die Sie wahrscheinlich nicht wollen, ist:
git rm --cached
. Es wird halten Sie Ihre lokale Datei, sondern wird als entfernt markiert, aus dem remote-repository.)Unterschied zwischen den ersten beiden Optionen?
assume-unchanged
ist temporär erlauben das ausblenden von änderungen aus einer Datei. Wenn Sie ausblenden möchten änderungen durchgeführt, um eine Datei, die Datei ändern, dann Kasse einer anderen Filiale, die Sie verwenden müssenno-assume-unchanged
dann wohl stash änderungen durchgeführt.skip-worktree
Folgen Sie, was auch immer von der Filiale der Kasse, mit deinen Modifikationen!Use case
assume-unchanged
Es wird vorausgesetzt, dass diese Datei nicht geändert werden sollten, und gibt Ihnen einen Reiniger-Ausgang, wenn dabei
git status
. Aber beim Check-out zu einem anderen Zweig, müssen Sie das flag zurücksetzen und commit-oder stash änderungen so vor. Wenn Sie ziehen Sie mit dieser option aktiviert, werden Sie brauchen, um Konflikte zu lösen und git won ' T auto-merge. Es eigentlich nur versteckt Modifikationen (git status
nicht zeigen, dass Sie die markierten Dateien).Ich mag es, wenn ich nur wollen, um das tracking zu stoppen-änderungen für eine Weile + Begehen eine Reihe von Dateien (
git commit -a
) im Zusammenhang mit der gleichen änderung.Use case
skip-worktree
Haben Sie ein setup-Klasse, die Parameter enthalten (zB. einschließlich Passwörter), dass Ihre Freunde müssen sich entsprechend ändern, um Ihre setup.
git update-index --skip-worktree MySetupClass.java
Die änderungen, die Sie tun, Folgen Sie unabhängig von der Branche. Warnung: wenn auch Ihre Freunde möchten, ändern Sie diese Klasse, Sie haben das gleiche setup, da sonst Ihre änderungen würden geschoben werden, um das remote-repository. Beim ziehen, werden die remote-version der Datei überschreiben soll Ihnen.
PS: das eine oder das andere, aber nicht beide, da haben Sie unerwünschte Nebenwirkungen. Wenn Sie möchten, um zu versuchen, einem anderen flag verwenden, sollten Sie deaktivieren Sie das letztere zuerst.
InformationsquelleAutor der Antwort belka
Um zu verhindern, dass überwachung eine Datei von git
Und wiederherstellen es wieder verwenden
InformationsquelleAutor der Antwort shijin
Ich bin davon ausgegangen, dass Sie Fragen, wie zu entfernen ALLE die Dateien in einem bestimmten Ordner oder in den Ordner "bin", Sondern als die Auswahl von einzelnen Dateien separat.
Können Sie diesen Befehl verwenden:
git rm -r -f /<floder-name>\*
Stellen Sie sicher, dass Sie in das übergeordnete Verzeichnis des Verzeichnisses.
Dieser Befehl wird rekursiv "löschen" alle Dateien, die im Papierkorb/oder build/- Ordner. Durch das Wort löschen meine ich, dass git wird behaupten, dass diese Dateien "gelöscht" und die Dateien werden nicht verfolgt. Das git wirklich markiert diese Dateien werden im löschen-Modus.
Tun, stellen Sie sicher, dass Sie Ihre .gitignore bereit für die kommende verpflichtet.
Dokumentation : git rm
InformationsquelleAutor der Antwort Vraj Pandya
Kann das problem verursacht werden, indem die Reihenfolge der operation.
Wenn Sie geändert .gitignore zuerst, dann git rm --cached xxx,Sie haben können, um weiterhin auf dieses problem stoßen.
Richtige Lösung:
Um invariante!
Den .gitignore reload nach der änderung!
InformationsquelleAutor der Antwort thearyong
Ich gehe davon aus, dass Sie versuchen, entfernen Sie eine einzelne Datei aus dem git zu Heften.
dazu würde ich empfehlen unter Befehl.
git update-index --assume-unchanged
Ex - git update-index --assume-unchanged .gitignore .idea/compiler.xml
InformationsquelleAutor der Antwort Pankaj Sonani
Um alle änderungen zu ignorieren, um alle Dateien (eines bestimmten Typs) in ein Verzeichnis, ich hatte zu kombinieren einige dieser Ansätze, da sonst die Dateien erstellt wurden, wenn Sie zuvor nicht existiert.
In der unten "excludedir" ist der name des Verzeichnisses, das möchte ich nicht sehen änderungen.
Entfernen Sie zunächst alle vorhandenen Dateien von der änderungsnachverfolgung cache (ohne entfernen von Ihrem Datei-system).
Können Sie das gleiche tun mit
modified:
.renamed:
ist ein bisschen komplizierter, da musst du schauen bei der post->
bit für den neuen Dateinamen ein, und tun die pre->
bisschen wie beschrieben fürdeleted:
unten.deleted:
Dateien beweisen ein bisschen komplizierter, als Sie kann nicht scheinen, um update-index für eine Datei, die nicht vorhanden sind, auf dem lokalen systemDen letzten Befehl in der Liste oben, entfernen Sie die Dateien wieder aus dem Dateisystem, so fühlen sich frei, um Sie wegzulassen.
Dann, block change tracking von diesem Verzeichnis aus
InformationsquelleAutor der Antwort mpag