Git ignorieren vim temporäre Dateien


237

Was ist der richtige Weg, um Git dazu zu bringen, temporäre Dateien, die von vim in allen Verzeichnissen erstellt wurden, zu ignorieren (entweder global im System oder lokal für ein einzelnes Projekt)?


6
Das Muster *.sw?löst den Standard, .swpaber auch die alternativen Auslagerungsdateierweiterungen wie .swo.
Buley

7
@buley Ihr Vorschlag ignoriert auch .swfDateien. Ich würde davon dringend abraten, insbesondere wenn Sie eine Flash-App erstellen.
Stephenmurdoch

1
@ Marflar Guter Punkt. Das gleiche Muster, dem die versteckte Datei vorangestellt ist, .sollte dies jedoch verhindern.
Buley

Ich habe heute auch eine SWX gesehen.
Richard

2
Experiment zeigt , dass 16 Backup - Dateien nach dem Erstellen ( .tmp.swp, .tmp.swo..., .tmp.swa), vim schafft .tmp.svz. Mir fehlt die Geduld zu sehen, was danach kommt .tmp.saa- vielleicht .tmp.rzz? UPDATE: Wenn man in die Quelle ( src/memline.c, Funktion findswapname()) schaut , gibt es danach .saamit einem Fehler auf: "E326: Zu viele Auslagerungsdateien gefunden".
Keith Thompson

Antworten:


390

Vim temporäre Dateien enden mit ~, sodass Sie der Datei .gitignoredie Zeile hinzufügen können

*~

Vim erstellt auch Auslagerungsdateien mit den Erweiterungen swp und swo. Um diese zu entfernen, verwenden Sie die Zeilen:

*.swp
*.swo

Dadurch werden alle temporären vim-Dateien in einem einzelnen Projekt ignoriert

Wenn Sie dies global tun möchten, können Sie eine Gitignore-Datei in Ihrem Zuhause erstellen (Sie können ihr einen anderen Namen oder Speicherort geben) und den folgenden Befehl verwenden:

git config --global core.excludesfile ~/.gitignore

Dann müssen Sie nur noch die Dateien hinzufügen, die Sie ignorieren möchten


30
Vim erstellt nacheinander benannte Auslagerungsdateien (.swp, .swo usw.), sodass ich sie .*.sw*in my verwende .gitignore, um sie alle auszublenden.
Drew Stephens

32
@DrewStephens, ich glaube .*.sw?genauer zu sein. (Obwohl ich gesehen habe, dass Leute eine Variante verwenden, um *.sw*zu vermuten, dass mir etwas wirklich Offensichtliches fehlt ...)
Morten Siebuhr

10
@Morten Laut vimdoc.sourceforge.net/htmldoc/recover.html ,. *. S ?? würde sie alle unter Unix abfangen (die .s ?? -Dekremente von .swp zu .saa).
Max Nanasy

6
Erweitern nur ein bisschen auf @MatrixFrog ausgezeichneten Kommentar - da diese Frage für vim ist , können Sie die richtige .gitignore in diesem Projekt finden Sie hier .
SnapShot

17
Achtung. Githubs .*.s[a-w][a-z]ignorieren .svgDateien.
Jon

118

Alternativ können Sie vim so konfigurieren, dass die Auslagerungsdateien an einem separaten Speicherort .vimrcgespeichert werden , z. B. indem Sie Ihrer Datei Zeilen hinzufügen, die den folgenden ähnlich sind :

set backupdir=$TEMP//
set directory=$TEMP//

Weitere Informationen finden Sie in diesem Vim-Tipp .


8
Beachten Sie, dass Sie unter Mac OS X $TMPDIRdas aktuelle Tempdir abrufen können :)
Alex Moore-Niemi

5
Der doppelte Schrägstrich nach Ihrem bevorzugten Verzeichnis (ich verwende ~ / tmp //) verhindert Kollisionen bei der Benennung von Dateien, indem der vollständige Pfad gespeichert wird. Auf diese Weise können Sie weiterhin Dateien mit dem Namen config.xml in zwei Verzeichnissen gleichzeitig bearbeiten.
Brian

1
Was heißt $TEMPdas
Themenfeld

Hinweis Ich musste auch hinzufügen set undodir=$TEMP//, da ich auch persistente Rückgängig-Dateien speichere.
Micah Lindstrom

24

Dies sollte nur pro Benutzer und nicht pro Repository erfolgen. Wenn Joe Emacs verwendet, möchte er, dass Emacs-Sicherungsdateien ignoriert werden, aber Betty (die vi verwendet) möchte, dass vi-Sicherungsdateien ignoriert werden (in vielen Fällen sind sie ähnlich, aber es gibt ungefähr 24.893 gängige Editoren und es ist hübsch lächerlich zu versuchen, alle verschiedenen Backup-Erweiterungen zu ignorieren.)

Mit anderen Worten, setzen Sie nichts ein .gitignoreoder core.excludesein $GIT_DIR/config. $HOME/.gitconfigGeben Sie stattdessen die Informationen ein (wie von Nunopolonia vorgeschlagen --global). Beachten Sie, dass "global" pro Benutzer und nicht pro System bedeutet.

Wenn Sie eine systemweite Konfiguration für alle Benutzer wünschen (was Sie nicht tun), benötigen Sie einen anderen Mechanismus. (Möglicherweise mit Vorlagen, die vor der Initialisierung des Repositorys eingerichtet wurden.)


3
Anscheinend ist Betty viel schlauer als Joe :-) Guter Rat und verdient eine Abstimmung, obwohl ich letztendlich die Antwort von Martinl verwendet habe (sie in Vim anstatt in Git zu korrigieren).
Paxdiablo

11

Ich würde auch empfehlen, Dateien wie: zu ignorieren.

.*.swp
.*.swo

wie Sie möglicherweise Dateien haben, die mit enden .swp


5

Beenden Sie vim vor "git commit".

um vimandere Ordner für Sicherungsdateien zu verwenden ( /tmpzum Beispiel):

set bdir-=.
set bdir+=/tmp

Damit vim die Verwendung des aktuellen Ordners für SWP-Dateien beendet:

set dir-=.
set dir+=/tmp

Die Verwendung -=, +=wäre im Allgemeinen gut, da vim andere Standardeinstellungen für bdir hat, dir , wir möchten nicht alle löschen. Weitere Informationen zu bdir finden Sie in der vim-Hilfe :

:h bdir
:h dir

5
Seien Sie vorsichtig, wo Sie Ihre vim-Auslagerungsdateien speichern. Sie könnten versehentlich Anmeldeinformationen oder andere Daten aus einer Datei
verlieren, die

5

Hier ist der eigentliche VIM-Code, der die Swap-Dateierweiterungen generiert:

/* 
 * Change the ".swp" extension to find another file that can be used. 
 * First decrement the last char: ".swo", ".swn", etc. 
 * If that still isn't enough decrement the last but one char: ".svz" 
 * Can happen when editing many "No Name" buffers. 
 */
if (fname[n - 1] == 'a')        /* ".s?a" */
{   
    if (fname[n - 2] == 'a')    /* ".saa": tried enough, give up */
    {   
        EMSG(_("E326: Too many swap files found"));
        vim_free(fname);
        fname = NULL;
        break;  
    }
    --fname[n - 2];             /* ".svz", ".suz", etc. */
    fname[n - 1] = 'z' + 1;
}
--fname[n - 1];                 /* ".swo", ".swn", etc. */

Dadurch werden Auslagerungsdateien im folgenden Format generiert:

[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]

Welches ist so ziemlich das, was in Githubs eigener Gitignore-Datei für VIM enthalten ist .

Wie andere richtig bemerkt haben, ignoriert dieser Gitignore auch SVG- Bilddateien und SWF- Adobe-Flash-Dateien.


3

Ich habe festgestellt, dass Git temporäre Dateien, die von vim erstellt wurden, ignoriert:

[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~

Es kann auch hier angesehen werden .


5
Außerdem werden die lästigen .swfDateien ignoriert, die immer wieder auftauchen, wenn Sie eine Flash-App erstellen.
Stephenmurdoch

Was gut funktioniert, solange Sie kein Entwickler sind, der Ihre Flash-Dateien
einchecken muss

1
Dies wird ignoriert, .svgwas ein Problem sein kann.
Bruno Bronosky

1
Es ist überflüssig aufzunehmen, *.un~da Sie haben*~
Bruno Bronosky

2

sicher,

Sie müssen lediglich einen ".gitignore" im Home-Verzeichnis Ihres Projekts erstellen und enthalten

*.swp

das ist es

in einem Befehl

project-home-directory$ echo '*.swp' >> .gitignore

4
Ich denke, echo *.swp >> .gitignorees ist besser, das Überschreiben des vorherigen .gitignore zu vermeiden.
Cesar A. Rivas

2
Sie möchten nicht, dass die Shell das '*' erweitert. Also, benutzeecho '*.swp' >> .gitignore
Eddified

Sie möchten auch nicht versehentlich einen dieser >Charaktere verpassen . Ich habe das mal mit der passwdDatei gemacht und mich dann abgemeldet :-)
paxdiablo

2
# VIM: Temperory files
*~

# VIM: Swap-files
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]

# VIM: Commands :cs, :ctags
tags
cscope.*

# VIM session
Session.vim

# VIM: netrw.vim: Network oriented reading, writing, browsing (eg: ftp scp) 
.netrwhist

Der Name der Auslagerungsdatei entspricht normalerweise der von Ihnen bearbeiteten Datei mit der Erweiterung ".swp".

  • Unter Unix ein '.' wird vorangestellt, um Dateinamen im selben Verzeichnis wie die bearbeitete Datei auszutauschen. Dadurch wird vermieden, dass die Auslagerungsdatei in einer Verzeichnisliste angezeigt wird.
  • Auf MS-DOS-Computern und wenn die Option 'Kurzname' aktiviert ist, kann jedes '.' im ursprünglichen Dateinamen wird durch '_' ersetzt.
  • Wenn diese Datei bereits vorhanden ist (z. B. wenn Sie sich von einem Absturz erholen), wird eine Warnung ausgegeben und eine andere Erweiterung verwendet, ".swo", ".swn" usw.
  • Eine vorhandene Datei wird niemals überschrieben.
  • Die Auslagerungsdatei wird gelöscht, sobald Vim die Bearbeitung der Datei beendet.

Der Ersatz von '.' mit '_' wird ausgeführt, um Probleme mit MS-DOS-kompatiblen Dateisystemen (z. B. Crossdos, Multidos) zu vermeiden.

http://vimdoc.sourceforge.net/htmldoc/recover.html

http://www.vim.org/scripts/script.php?script_id=1075


0

In meinem Fall werden die temporären Dateien bereits durch vorherige Aktionen festgeschrieben. Wenn Sie also .gitignore ändern, werden diese festgeschriebenen Dateien nicht beeinflusst. Sie müssen git rm files_to_be_ignored --cachezuerst festschreiben, dann festschreiben und dann FERTIG.


0

Dies funktioniert auf einem Mac, wie von Alex Moore-Niemi festgestellt:

set backupdir=$TMPDIR//
set directory=$TMPDIR//

Stellen Sie sicher, zu verwenden TMPDIRund nicht TEMPDIR.


-4

Wenn Sie die Quellcodeverwaltung verwenden. vim temp dateien sind ziemlich nutzlos.
Vielleicht möchten Sie vim so konfigurieren, dass sie nicht erstellt werden.

Bearbeiten Sie einfach Ihr ~ / .vimrc und fügen Sie die folgenden Zeilen hinzu:

set nobackup
set noswapfile

6
Die Quellcodeverwaltung arbeitet nicht mit der gleichen Granularität wie Backups oder Vims Swapfiles. Selbst wenn Sie nach jedem Speichern einen Commit durchgeführt haben (oder nach einer bestimmten Anzahl von Zeichen oder Sekunden - eine Vereinfachung der Swap-Dateien von Vim), ist es dennoch sehr wahrscheinlich, dass Sie Dateien bearbeiten möchten, die nicht quellengesteuert sind (für welche Backups und Swapfiles sind immer noch wünschenswert).
Chris Johnsen

8
Temporäre VIM-Dateien sind äußerst nützlich für Editorabstürze und aus mehreren anderen Gründen. Wenn Sie sie ausschalten, werfen Sie das Baby mit dem Badewasser weg.
Brian Riehman

5
@Arnis Sag mal, ein Stromausfall? Oder Ihre X-Sitzung aus irgendeinem Grund sterben zu lassen. vim temporäre Dateien sind IMO sehr wichtig.
Jrdioko

1
@jrdioko X Absturz ist der Grund, warum man verwenden möchte screen(oder dtachwenn er nicht alle Bildschirmfunktionen möchte). Stromausfälle werden von der USV behandelt. Backups werden von {Ihrer bevorzugten Software zum Sichern aller wichtigen Dateien} durchgeführt. Ich verwende Auslagerungsdateien, um benachrichtigt zu werden, wenn ich versuche, bereits bearbeitete Dateien zu bearbeiten. Sicherungsdateien, da der N + 1-Platz bei der Sicherung nicht schadet, machen Dateien rückgängig, da dauerhaftes Rückgängigmachen praktisch ist. Nur das Rückgängigmachen von Dateien ist für mich etwas wichtig.
ZyX

5
Sie sollten vim besser anweisen, temporäre Dateien an anderer Stelle zu speichern, als sie vollständig auszuschalten.
Kyle
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.