Wie kann ich das Tracking beenden und Änderungen an einer Datei in Git ignorieren?

1731

Ich habe ein Projekt geklont, das einige .csprojDateien enthält. Ich brauche / mag nicht, dass meine lokalen csprojDateien von Git verfolgt werden (oder beim Erstellen eines Patches aufgerufen werden), aber sie werden eindeutig im Projekt benötigt.

Ich habe *.csprojzu meinem LOCAL hinzugefügt .gitignore, aber die Dateien befinden sich bereits im Repo.

Wenn ich den Git-Status eingebe, werden meine Änderungen angezeigt, an csprojdenen ich nicht interessiert bin, Patches zu verfolgen oder einzureichen.

Wie entferne ich das "Tracking" dieser Dateien aus meinem persönlichen Repo (behalte sie jedoch 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?

Joshua Ball
quelle
18
Eine sehr nützliche Frage, aber ich bin gespannt, warum Sie Änderungen an der .csprojDatei nicht nachverfolgen möchten , was ein wichtiger Bestandteil jedes Projekts ist. Änderungen an der .csproj.userDatei oder an .Publish.XMLDateien, die ich völlig verstehen kann, nicht verfolgen, aber ich bin gespannt, warum Sie die nicht verfolgen möchten .csproj...
Owen Blacker
7
Vielleicht verwenden sie eine andere IDE?
Jarrett
3
Ironischerweise bin ich zu diesem Thread gekommen, weil ich .suo-Dateien aus einem Repo entfernen möchte, sie aber lokal behalten möchte. Für die Nachwelt erfordert die .Net-Entwicklung, dass Sie .csproj-Dateien im Repo behalten. Diese Änderungen sollten immer nachverfolgt werden, es sei denn, Sie möchten den Zorn anderer Entwickler in Ihrem Projekt spüren. Wenn Sie sich nicht sicher sind, schauen Sie sich das Repo der Gitignore-Dateien auf GitHub an: github.com/github/gitignore/blob/master/VisualStudio.gitignore
Longda
1
@ Cupcake, die Frage, mit der Sie verlinkt haben, wurde 15 Tage nach dieser Frage geschrieben? Vielleicht haben Sie einen anderen im Sinn?
Stephenmurdoch
@marflar kanonische Fragen müssen nicht unbedingt die ältesten sein, sondern nur die besten . Der, mit dem ich verlinkt habe, hat 20 Antworten, während dieser nur 5 hat.

Antworten:

2129

Es git rm --cachedsollte in Ordnung sein, nur jede der Dateien aufzurufen, die Sie aus der Revisionskontrolle entfernen möchten. Solange Ihre lokalen Ignoriermuster korrekt sind, werden diese Dateien nicht in der Ausgabe des 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 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 Sie wahrscheinlich tun möchten: (von unten @ Ryan Taylor Antwort )

  1. Dies soll git mitteilen, dass Sie Ihre eigene unabhängige Version der Datei oder des Ordners möchten. Beispielsweise möchten Sie keine Produktions- / Staging-Konfigurationsdateien ü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/

Anthony
quelle
187
"git rm --cached <Datei>" würde <Datei> aus der Versionskontrolle entfernen, während es im funktionierenden Repository verbleibt. Ob es das ist, was Sie wollen ...
Jakub Narębski
51
Aber wenn andere das Repository abrufen, wird dann ihre eigene * .csproj-Datei entfernt? Denn wenn wir wollen, dass die Datei nicht verfolgt, sondern nicht gelöscht wird.
FMaz008
23
Wenn Sie versuchen, ALLE Dateien in einem Verzeichnis zu entfernen, kombinieren Sie es mit git ls-files: git ls-files | xargs git rm --cached- Dadurch wird alles aus dem git-Index in einem bestimmten Verzeichnis entfernt, ohne die tatsächlichen Dateien zu löschen.
Marco
129
git rm --cached -r <dir>arbeitet rekursiv an einem Ordner und allen darin enthaltenen Dateien.
Chris K
41
Dies stoppt die Verfolgung der Datei, bewahrt sie lokal auf, bewirkt jedoch, dass sie für jeden gelöscht wird , der zieht
Edward Newell
249

Wenn Sie dies tun git update-index --assume-unchanged file.csproj, überprüft git file.csproj nicht automatisch auf Änderungen. Dadurch wird verhindert, dass sie bei jeder Änderung im git-Status angezeigt werden. Sie können also alle Ihre .csproj-Dateien auf diese Weise markieren - obwohl Sie alle neuen Dateien, die Ihnen das Upstream-Repo sendet, manuell markieren müssen. (Wenn Sie sie in Ihrem .gitignoreoder haben .git/info/exclude, werden die von Ihnen erstellten ignoriert.)

Ich bin mir nicht ganz sicher, was .csproj-Dateien sind ... Wenn es sich um IDE-Konfigurationen handelt (ähnlich den .eclipse- und .classpath-Dateien von Eclipse), würde ich vorschlagen, dass sie einfach niemals quellengesteuert werden sollten alle. Wenn sie jedoch Teil des Build-Systems sind (wie Makefiles), sollten sie dies eindeutig tun - und eine Möglichkeit, optionale lokale Änderungen (z. B. von einer local.csproj a la config.mk) zu übernehmen, wäre nützlich : Teilen Sie den Aufbau in globale Teile und lokale Überschreibungen auf.

araqnid
quelle
8
csproj ist eine C # -Projektdatei, die nachverfolgt, welche Dateien in Ihrem Projekt enthalten sind, und andere wenige Konfigurationen. Sie muss quellengesteuert sein, damit das Projekt funktioniert
SparK
4
Dies ist die einzig richtige Antwort hier! Ich benutze @araqnids answer seit Jahren und es funktioniert genau wie angefordert, um dieses Problem zu lösen.
NHDaly
Welche Bedeutung hat das Präfix 'Datei' im Argument für den Befehl? Warum ist es nicht einfach?.csproj ?
GreenAsJade
1
Gibt es eine Möglichkeit, festzustellen, ob dies für eine Datei oder für welche Dateien in einem Repo durchgeführt wurde? Ich bin etwas nervös, wenn ich vergesse, dass ich das getan habe, und mich dann frage, warum zum Teufel diese Datei später nicht aktualisiert wird!
GreenAsJade
4
@GreenAsJade: Zeigt git ls-files -vDateien an, die mit einem Kleinbuchstaben unverändert angenommen werden (z. B. hanstelle von Hfür zwischengespeicherte Dateien üblichen ).
Amadan
238

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

1. Dadurch bleibt die lokale Datei für Sie erhalten, sie wird jedoch für alle anderen Benutzer gelöscht, wenn diese ziehen.

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

2. Dies dient zur Optimierung, z. B. für einen Ordner mit einer großen Anzahl von Dateien, z. B. SDKs, die sich wahrscheinlich nie ändern werden. Es weist git an, den riesigen Ordner jedes Mal lokal nicht mehr auf Änderungen zu überprüfen, da er keine hat. Der assume-unchangedIndex wird zurückgesetzt und die Datei (en) überschrieben, wenn vorgelagerte Änderungen an der Datei / dem Ordner vorgenommen werden (beim Ziehen).

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

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

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

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

Ryan Taylor
quelle
8
Diese Antwort ist die vollständigste - sie bietet verschiedene Lösungen mit den jeweiligen Auswirkungen. In dem speziellen Fall, mit dem ich arbeite, ist ein Kennwort in eine Konfigurationsdatei eingebettet. Ich möchte eine Vorlagendatei weitergeben und dann das Kennwort zu meiner Kopie hinzufügen. Die Kopie mit dem Passwort sollte ignoriert und nicht überschrieben werden.
Bmacnaughton
1
Wie kann ich in meinem lokalen Verzeichnis überprüfen, welche Dateien für "unverändert annehmen" oder "Arbeitsbaum überspringen" gelten?
Supawat Pusavanno
3
@SupawatPusavanno, um zu sehen, welche Dateien Sie zuvor für "unverändert" oder "Arbeitsbaum überspringen" ausgewählt haben, sehen Sie sich diese Antwort an. Stackoverflow.com/questions/42363881/… - verwendet grepundgit ls-files
Ryan Taylor
1
Sehr gute Antwort. Aber git wirft einen Fehler aus, wenn ich versuche, zu einem anderen Zweig zu wechseln: Fehler: "Ihre lokalen Änderungen an den folgenden Dateien würden durch Auschecken überschrieben ....." und die Lösung besteht darin, die Änderungen vor dem Wechsel zu speichern und zu entfernen, wenn Du kommst zurück zum Zweig.
PhantomReference
@ RyanTaylor: Ich habe versucht, zuerst unverändert anzunehmen (hat nicht funktioniert) und den Befehl worktree zu überspringen (hat nicht funktioniert). Wenn ich mit dem Git-Status überprüfe, dass die Dateien nicht angezeigt werden, bedeutet dies, dass der Befehl funktioniert hat. Aber wenn ich den Code auch it gives me error that your local changes would be overwrittenin diesen beiden Dateien wieder aus dem Git Origin-Repo ziehe, bedeutet das, dass er nicht entfolgt wird, oder?
NeverGiveUp161
152

Dies ist ein zweistufiger Prozess:

  1. Entfernen Sie die Verfolgung von Dateien / Ordnern, behalten Sie sie jedoch auf der Festplatte bei

    git rm --cached 
    

    Jetzt werden sie nicht als "geändert" angezeigt, sondern immer noch als

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

rjha94
quelle
56
Nein, dadurch wird die Datei aus der Verfolgung entfernt, lokal beibehalten, aber für jeden, der sie zieht, gelöscht .
Edward Newell
1
In meinem Fall habe ich versehentlich einen Ordner hinzugefügt, den ich nicht verfolgen wollte, also brauchte ich diesen.
Sonny
4
Ja, es ist in der Tat die falsche Antwort auf die gestellte Frage - aber es ist wahrscheinlich die richtige Antwort für die meisten Menschen, die diese Frage in den Suchergebnissen finden (wie ich).
Andrew Spencer
95

Die akzeptierte Antwort hat bei mir immer noch nicht funktioniert

ich benutzte

git rm -r --cached.

git hinzufügen.

git commit -m "Fixing .gitignore"

Habe die Antwort von hier gefunden

Buddhika Hasthanayake
quelle
Dieser Link ist sehr nützlich, insbesondere um rekursiv alle Dateien in der .gitignore
rmcsharry
9
Ich bin dreimal hierher zurückgekehrt, hoffentlich kann ich mich vor dem nächsten Mal in Erinnerung behalten!
Harry Bosh
Der Kommentar von @Edward Newell wie in der obigen Antwort gilt auch hier: " Dadurch wird die Datei aus der Verfolgung entfernt, lokal gespeichert, aber für jeden, der sie zieht, gelöscht ."
ToJo
46

Hast du deinen .gitignore vergessen?

Wenn Sie das gesamte Projekt lokal haben, aber vergessen haben, es hinzuzufügen, ignorieren Sie git und verfolgen jetzt einige unnötige Dateien. Verwenden Sie diesen Befehl, um alles zu entfernen

git rm --cached -r .

Stellen Sie sicher, dass Sie an der 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

Ich hoffe, dies hilft Menschen, die Änderungen an ihren vornehmen .gitignoreoder alles gemeinsam vergessen müssen.

  • Es entfernt den gesamten Cache
  • Sieht deinen .gitignore an
  • Fügt die Dateien hinzu, die Sie verfolgen möchten
  • Schiebt zu Ihrem Repo
Joe Lloyd
quelle
4
Wenn Sie über das Entfernen oder Hinzufügen sprechen, vergessen Sie zu sagen, wann und wo. Aus der Titelliste entfernen? Aus dem Repository? Aus dem lokalen Projektraum? Beim Ziehen entfernen? Beim Festschreiben? Auf Druck? Leider haben alle Autoren hier das gleiche Problem.
Gangnus
3
@Gangnus Ich glaube, niemand hat den Punkt, den Sie ansprechen möchten, "geklärt", da es völlig offensichtlich ist, dass die Datei nicht tatsächlich von der Festplatte oder dem Repository entfernt wird. Diese Antwort gibt die chronologische Reihenfolge der Befehle an. Es ist nicht mysteriös oder schlecht erklärt, wie Ihr Kommentar vermuten lässt.
Anthony
Der Kommentar von @Edward Newell wie in der obigen Antwort gilt auch hier: " Dadurch wird die Datei aus der Verfolgung entfernt, lokal gespeichert, aber für jeden, der sie zieht, gelöscht ."
ToJo
26

Wie in anderen Antworten ausgeführt, ist die ausgewählte Antwort falsch.

Die Antwort auf eine andere Frage deutet darauf hin, dass möglicherweise ein Sprungbaum erforderlich ist.

git update-index --skip-worktree <file>
the_new_mr
quelle
2
Nein, nicht wirklich: --skip-worktreeWird verwendet, um die Datei im Repository zu behalten, aber die Änderungen nicht mehr zu verfolgen . Wie Ihre Antwort sagt: --skip-worktree ist nützlich, wenn Sie git anweisen, eine bestimmte Datei niemals zu berühren, weil Entwickler sie ändern sollten
Erdal G.
4
@ErdalG. Genau. Entsprechend der Frage wollen sie alle Änderungen in der Datei ignorieren, aber die Datei im Repo behalten
the_new_mr
Stimmen Sie mit @the_new_mr überein --assume-unchangedund --skip-worktreehaben Sie einen ähnlichen Effekt, aber ihre Zwecke sind völlig unterschiedlich. Ersteres dient dazu, die Git-Leistung zu beschleunigen, indem Git getäuscht wird , um bestimmte Dateien nicht zu überprüfen , während letzteres dazu dient , zukünftige Änderungen an bestimmten Dateien zu ignorieren , die für die Laufzeit geeignet sind, aber wichtige Dateien.
Victor Wong
22

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

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

oder

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

usw

Peter
quelle
Dies ist eine sehr gute Lösung, denn bei jeder Gelegenheit möchten Sie den Gitignore Schritt für Schritt
reparieren
15

Um zu verhindern, dass eine Datei von git überwacht wird

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

Und um es wieder zu verwenden

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

Ein Repo für ähnliche Anwendungsfälle https://github.com/awslabs/git-secrets

Shijin
quelle
1
Das Zurücksetzen des Trinkgeldes war ein Lebensretter, danke!
Hamman Samuel
9

Viele Leute raten Ihnen zu verwenden git update-index --assume-unchanged . Dies ist zwar eine gute Lösung, aber nur kurzfristig.

Was Sie wahrscheinlich tun möchten, ist Folgendes : git update-index --skip-worktree.

(Die dritte Option, die Sie wahrscheinlich nicht möchten, ist : git rm --cached. Sie behält Ihre lokale Datei bei, wird jedoch als aus dem Remote-Repository entfernt markiert.)

Unterschied zwischen den ersten beiden Optionen?

  • assume-unchangedMit dieser Option können Sie Änderungen vorübergehend aus einer Datei ausblenden. Wenn Sie an einer Datei vorgenommene Änderungen ausblenden, die Datei ändern und dann einen anderen Zweig no-assume-unchangedauschecken möchten, müssen Sie die vorgenommenen Änderungen verwenden.
  • skip-worktree wird Ihnen mit Ihren Änderungen folgen, egal in welcher Filiale Sie sich befinden!

Anwendungsfall von assume-unchanged

Es wird davon ausgegangen, dass diese Datei nicht geändert werden sollte, und Sie erhalten dabei eine sauberere Ausgabe git status. Wenn Sie jedoch in einen anderen Zweig auschecken, müssen Sie das Flag zurücksetzen und zuvor Änderungen festschreiben oder speichern. Wenn Sie mit aktivierter Option ziehen, müssen Sie Konflikte lösen, und Git wird nicht automatisch zusammengeführt. Tatsächlich werden nur Änderungen ausgeblendet ( git statusdie markierten Dateien werden nicht angezeigt).

Ich verwende es gerne, wenn ich Änderungen nur für eine Weile nicht mehr verfolgen möchte + eine Reihe von Dateien ( git commit -a) festschreiben möchte , die sich auf dieselbe Änderung beziehen .

Anwendungsfall von skip-worktree

Sie haben eine Setup-Klasse mit Parametern (z. B. einschließlich Passwörtern), die Ihre Freunde entsprechend ihrem Setup ändern müssen.

  • 1: Erstellen Sie eine erste Version dieser Klasse, füllen Sie Felder aus, die Sie ausfüllen können, und lassen Sie andere leer / null.
  • 2: Commit und Push auf den Remote-Server.
  • 3: git update-index --skip-worktree MySetupClass.java
  • 4: Aktualisieren Sie Ihre Konfigurationsklasse mit Ihren eigenen Parametern.
  • 5: Arbeiten Sie wieder an einer anderen Funktion.

Die Änderungen, die Sie vornehmen, folgen Ihnen unabhängig von der Branche. Warnung: Wenn Ihre Freunde diese Klasse ebenfalls ändern möchten, müssen sie dasselbe Setup haben, andernfalls werden ihre Änderungen in das Remote-Repository übertragen. Beim Ziehen sollte die Remote-Version der Datei Ihre überschreiben.

PS: Machen Sie das eine oder andere, aber nicht beides, da Sie unerwünschte Nebenwirkungen haben. Wenn Sie ein anderes Flag ausprobieren möchten, sollten Sie dieses zuerst deaktivieren.

belka
quelle
7

Um Git anzuweisen, Änderungen an Ihrer lokalen Datei / Ihrem lokalen Ordner nicht zu verfolgen (was bedeutet, dass der Git-Status keine Änderungen daran erkennt), gehen Sie wie folgt vor:

git update-index --skip-worktree path/to/file

Und um Git anzuweisen, Änderungen an Ihrer lokalen Version erneut zu verfolgen (damit Sie die Änderungen festschreiben können), gehen Sie wie folgt vor:

git update-index --no-skip-worktree path/to/file
Ruto Collins
quelle
1

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

Verwenden Sie diese Option, wenn Sie eine Datei haben, die sich im zentralen Repo und auch im lokalen Repo befindet. Sie müssen Änderungen in dieser Datei vornehmen, dürfen jedoch nicht für das zentrale Repo bereitgestellt / festgeschrieben werden. Diese Datei sollte nicht hinzugefügt werden.gitignore . Da neue Änderungen in der Datei von Systemadministratoren eingeführt werden, müssen ältere Entwickler auf alle lokalen Repos verteilt werden.

Bestes Beispiel: Konfigurationsdatei für DB-Verbindungen . In einem zentralen Repo haben Sie alle Benutzernamen, Kennwörter, Hosts und Ports mit den Werten eines Produktions-DB-Servers. In lokalen Entwicklern sollten Sie jedoch nur einen lokalen oder einen anderen Entwicklungs-DB-Server verwenden (den Ihr Team eingerichtet hat). In diesem Fall möchten Sie Änderungen an der Konfigurationsdatei vornehmen, sollten sich jedoch nicht auf das zentrale Repo festlegen.

Beste

Seenivasan
quelle
0

Ich gehe davon aus, dass Sie fragen, wie ALLE Dateien in einem bestimmten Ordner oder im Ordner bin entfernt werden sollen, anstatt jede Datei einzeln auszuwählen.

Sie können diesen Befehl verwenden:

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

Stellen Sie sicher, dass Sie sich im übergeordneten Verzeichnis des Verzeichnisses befinden.
Dieser Befehl "löscht" rekursiv alle Dateien, die sich in den Ordnern bin / oder build / befinden. Mit dem Wort "Löschen" meine ich, dass git vorgibt, dass diese Dateien "gelöscht" werden und diese Dateien nicht verfolgt werden. Der Git markiert diese Dateien wirklich als gelöscht.

Stellen Sie sicher, dass Sie Ihren .gitignore für bevorstehende Commits bereit haben.
Dokumentation: git rm

Vraj Pandya
quelle
0

Das Problem kann durch die Reihenfolge der Bedienung verursacht werden. Wenn Sie zuerst den .gitignore und dann git rm --cached xxx geändert haben, muss dieses Problem möglicherweise weiterhin auftreten.

Richtige Lösung:

  1. git rm - zwischengespeichert xxx
  2. hat den .gitignore geändert

Bestellinvariant!

Der .gitignore wird nach Änderung neu geladen!

thearyong
quelle
0

Ich gehe davon aus, dass Sie versuchen, eine einzelne Datei aus dem Git-Tacking zu entfernen. dafür würde ich unten befehl empfehlen.

git update-index --assume-unverändert

Ex - git update-index --assume-unverändert .gitignore .idea / compiler.xml

Pankaj Sonani
quelle
0

Um Änderungen an allen Dateien (eines bestimmten Typs) in einem Verzeichnis zu ignorieren, musste ich einige dieser Ansätze kombinieren, andernfalls wurden die Dateien erstellt, wenn sie zuvor nicht vorhanden waren.

Im Folgenden ist "ausgeschlossen" der Name des Verzeichnisses, in dem keine Änderungen vorgenommen werden sollen.

Entfernen Sie zunächst alle vorhandenen neuen Dateien aus Ihrem Änderungsverfolgungscache (ohne sie aus Ihrem Dateisystem zu entfernen).

git status | grep "new file:" | cut  --complement -d " " -f1-4 | grep "^excludedir" | xargs git rm --cache

Sie können das gleiche mit tun modified:. renamed:ist etwas komplizierter, da Sie im Post- ->Bit nach dem neuen Dateinamen suchen und das Pre- ->Bit wie deleted:unten beschrieben ausführen müssen.

deleted: Dateien erweisen sich als etwas komplizierter, da Sie den Index für eine Datei, die auf dem lokalen System nicht vorhanden ist, scheinbar nicht aktualisieren können

echo .deletedfiles >> .gitignore
git status | grep "deleted:" | cut  --complement -d " " -f1-4 | grep "^excludedir" > .deletedfiles
cat .deletedfiles | xargs -d '\n' touch
cat .deletedfiles | xargs -d '\n' git add -f
cat .deletedfiles | xargs -d '\n' git update-index --assume-unchanged
cat .deletedfiles | xargs -d '\n' rm

Mit dem letzten Befehl in der obigen Liste werden die Dateien wieder aus Ihrem Dateisystem entfernt. Sie können dies also weglassen.

Blockieren Sie dann die Änderungsverfolgung aus diesem Verzeichnis

git ls-files excludedir/ | xargs git update-index --skip-worktree
git update index --skip-worktree excludedir/
mpag
quelle
0

In dieser Antwort wurde ein fast git-befehlsfreier Ansatz angegeben :

So ignorieren Sie bestimmte Dateien für jedes lokale Repo :

  1. Erstellen Sie eine Datei ~/.gitignore_global, z. B. von touch ~/.gitignore_globalin Ihrem Terminal.
  2. Führen Sie git config --global core.excludesfile ~/.gitignore_globaleinmal.
  3. Schreiben Sie die Datei- / Verzeichnispfade, in die Sie ignorieren möchten ~/.gitignore_global. zB modules/*.H, von denen angenommen wird, dass sie sich in Ihrem Arbeitsverzeichnis befinden, dh $WORK_DIR/modules/*.H.

So ignorieren Sie bestimmte Dateien für ein einzelnes lokales Repo :

  1. Führen Sie den obigen dritten Schritt für eine Datei .git/info/excludeinnerhalb des Repos aus, dh schreiben Sie die Datei- / Verzeichnispfade, in die Sie ignorieren möchten .git/info/exclude. zB modules/*.C, von denen angenommen wird, dass sie sich in Ihrem Arbeitsverzeichnis befinden, dh $WORK_DIR/modules/*.C.
Herpes-freier Ingenieur
quelle
0

Wenden Sie .gitignore auf die Gegenwart / Zukunft an

Diese Methode wendet das Standardverhalten von .gitignore an und erfordert keine manuelle Angabe der Dateien, die ignoriert werden müssen .

Kann nicht --exclude-from=.gitignoremehr verwendet werden: / - Hier ist die aktualisierte Methode:

Allgemeiner Rat: Beginnen Sie mit einem sauberen Repo - alles festgeschrieben, nichts im Arbeitsverzeichnis oder Index anstehend, und erstellen Sie ein Backup !

#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"

#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached

#optionally add anything to the index that was previously ignored but now shouldn't be:
git add *

#commit again
#optionally use the --amend flag to merge this commit with the previous one instead of creating 2 commits.

git commit -m "re-applied modified .gitignore"

#other devs who pull after this commit is pushed will see the  newly-.gitignored files DELETED

Wenn Sie auch die neu ignorierten Dateien aus dem Festschreibungsverlauf des Zweigs löschen müssen oder wenn Sie nicht möchten, dass die neu ignorierten Dateien aus zukünftigen Pulls gelöscht werden, lesen Sie diese Antwort .

Goofologie
quelle
-1

Finden Sie nach langer Suche einen Weg, dies zu tun. Alias ​​ein Git-Befehl in.gitconfig wie in Android Studio-Projekt , vor dem Checkout-Zweig die Konfigurationsdatei zurücksetzen und dann überspringen , nach dem Checkout-Zweig verwenden Sie seddie 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 && :

Chinaanihchen
quelle