2009-03-17 16 views
152

Kann ich git anweisen, Dateien zu ignorieren, die geändert (gelöscht), aber nicht festgeschrieben werden sollen?Ignorieren Sie modifizierte (aber nicht festgeschriebene) Dateien in git?

Die Situation ist, dass ich ein Unterverzeichnis im Repo habe, das Sachen enthält, an denen ich überhaupt nicht interessiert bin, also habe ich es gelöscht, um zu verhindern, dass es in Autovervollständigungen und ähnlichem auftaucht (in der IDE).

Aber jetzt, wenn ich diesen Ordner zu .gitignore hinzufügen, ändert sich einfach nichts, alle Sachen werden als durch git Status gelöscht angezeigt.

Gibt es eine Möglichkeit, Git zu ignorieren, so oder so?

(Alternativ kann, wie ich bin mit git-svn, konnte ich die Änderungen an den lokalen git commit und sicherzustellen, dass sie auf die SVN-Repo nicht übergeben werden?)

+0

statt sie als unmodifizierte im Repo-Index nur Markierung, möchten Sie vielleicht, sie entfernen aus dem Index vollständig. Während Sie die Datei immer noch in Ihrem Arbeitsverzeichnis haben, kann der Repo-Index vollständig gelöscht werden, und git wird nicht einmal erkennen, dass er existiert hat. Bitte sehen Sie den Link in meiner Antwort unten. – MaurerPower

Antwort

231

, sich den git-update-index man page anwenden und das --asse-unveränderte b es und verwandt.

, wenn ich Ihr Problem habe ich die

git update-index --assume-unchanged dir-im-removing/ 

oder eine bestimmte Datei

git update-index --assume-unchanged config/database.yml 
+0

Dies funktioniert hervorragend für geänderte Dateien. Wenn ich jedoch das Verzeichnis lösche (entweder mit 'rm' oder 'git rm'), werden die Dateien in 'git status' als fehlend/gelöscht aufgelistet. Ich denke, ich werde dies als Antwort akzeptieren und die Frage erneut stellen, indem ich explizit nach gelöschten Dateien frage. (Zuerst wusste ich nicht, dass es so einen großen Unterschied gab;) Danke! –

+3

Können Sie alle Ihre ignorierten Dateien irgendwie auflisten? – Zitrax

+4

Zitrax, ja, siehe http://stackoverflow.com/questions/2363197/ –

6

Raupen Dateien nicht ignoriert werden können, Sie müssen sie also zuerst aus Ihrem Index entfernen. Fügen Sie eine .gitignore hinzu, die die Verzeichnisse ignoriert, die Sie nicht möchten, löschen Sie sie anschließend und entfernen Sie alle Nachzügler mit git rm --cached.

+0

Hm, ich versuche das, aber dann habe ich alle Dateien als gelöscht aufgelistet. Sollte ich das begehen und das --cached wird dazu führen, dass es nicht zu Fernbedienungen geschoben wird? Oder habe ich etw. falsch? Das Wichtigste für mich ist nicht, das entfernte (svn) Repo zu verderben. –

+1

Sie können nichts festlegen, das nicht in Ihrem Index beginnt. git rm --cache alles, was du nicht committen willst, dann füge lokal eine .gitignore Datei hinzu, die "*" enthält. Nun, egal wie viel Sie hinzufügen, werden Sie diese Dateien nie wieder in Ihrem Index sehen. –

+0

Ah, ich glaube ich verstehe --cached jetzt ..Es entfernt nur das Zeug aus dem Index und lässt den Arbeitsbaum allein. Ich bin mir nicht sicher, ob mir etwas fehlt, aber AFAIS Ich suche das Gegenteil und entferne es aus dem Arbeitsbaum, ohne den Index zu berühren. Oder kann ich es irgendwie dafür benutzen? –

4

Was ich in der Regel tun, ist

git stash

git was-sonst

git stash

git stash klar

+9

fwiw kannst du auch 'git stash pop' machen, um die letzten beiden auf einmal zu tun (obwohl 'git stash clear' alle Stash-Einträge löscht, wenn du das willst). – Groxx

36

Eine neuere und bessere Option git update-index --skip-worktree ist, die nicht auf einem Hard-Reset oder einem verloren neuer Wechsel von einem Zug.

Siehe Manpage bei http://schacon.github.com/git/git-update-index.html

Und einen Vergleich bei http://fallengamer.livejournal.com/93321.html

+8

Ein Nachteil zu beachten ist, dass, wenn die Änderungen einer Datei mit "überspringen-worktree" ausgeblendet wurden, das Auffinden dieser Dateien ein wenig umständlich ist. Der einzige Weg, den ich kenne, ist 'git ls-files -v | grep -v'^H''. Viele GUI-Tools kennen dieses Feature nicht und können witzige Fehler erzeugen, wenn z. Ein 'Checkout' scheitert an" versteckten "modifizierten Dateien. – sleske

+0

+1 sleske, als dieser Befehl mich gerettet, nachdem ich versehentlich eine Datei "übersprang"! –

3

Verwenden Sie diesen Code

git update-index --assume-unchanged file-name 
+0

Wirklich interessant. Ich muss ein passord in meinem maven-Projekt verwenden, aber ich möchte es nicht auf einem git-Repository veröffentlichen, also platziere ich Platzhalter dafür ohne Wert in lokalen, Eigenschaften, ich begehe es, dann füge ich das Passwort ein, markiere aber das Datei unverändert mit dem vorgeschlagenen Befehl. Also das Passwort wird nicht veröffentlicht. –

Verwandte Themen