web-dev-qa-db-fra.com

git ignore les fichiers temporaires de vim

Quelle est la bonne façon de faire en sorte que git ignore les fichiers temporaires produits par vim dans tous les répertoires (globalement sur le système ou localement pour un seul projet)?

219
jrdioko

Les fichiers temporaires de Vim se terminent par ~ afin que vous puissiez ajouter au fichier .gitignore la ligne

*~

Vim crée également des fichiers d'échange portant les extensions swp et swo. pour les supprimer, utilisez les lignes:

*.swp
*.swo

Cela ignorera tous les fichiers temporaires vim d'un même projet

Si vous voulez le faire globalement, vous pouvez créer un fichier .gitignore dans votre maison (vous pouvez lui donner un autre nom ou un autre emplacement) et utiliser la commande suivante:

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

Ensuite, vous devez simplement ajouter les fichiers que vous souhaitez ignorer

367
nunopolonia

Vous pouvez également configurer vim pour enregistrer les fichiers d'échange dans un emplacement séparé, par exemple. en ajoutant des lignes similaires à ce qui suit dans votre fichier .vimrc:

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

Voir ceci astuce vim pour plus d'informations.

111
martinl

C'est quelque chose qui ne devrait être fait que par utilisateur, et non par référentiel. Si Joe utilise emacs, il voudra que les fichiers de sauvegarde d’emacs soient ignorés, mais Betty (qui utilise vi) voudra que les fichiers de sauvegarde de vi soient ignorés (dans la plupart des cas, ils sont similaires, mais il existe environ 24 893 éditeurs communs et c ridicule d'essayer d'ignorer toutes les extensions de sauvegarde.)

En d'autres termes, ne mettez rien dans .gitignore ni dans core.excludes dans $GIT_DIR/config. Mettez les informations dans $HOME/.gitconfig à la place (comme le suggère nunopolonia avec --global.). Notez que "global" signifie par utilisateur et non par système.

Si vous souhaitez configurer tous les utilisateurs sur le système (ce que vous n’avez pas fait), vous aurez besoin d’un mécanisme différent. (Éventuellement avec la configuration des modèles avant l'initialisation du référentiel.)

23
William Pursell

Je recommanderais également de penser à ignorer les fichiers tels que:

.*.swp
.*.swo

car vous pouvez avoir des fichiers qui se terminent par .swp

9

Quittez vim avant "git commit".

pour que vim utilise d'autres dossiers pour les fichiers de sauvegarde, (_/tmp_ par exemple):

_set bdir-=.
set bdir+=/tmp
_

pour que vim cesse d'utiliser le dossier en cours pour les fichiers .swp:

_set dir-=.
set dir+=/tmp
_

Utiliser -=, += serait généralement bon, car vim a d'autres valeurs par défaut pour bdir, dir, nous ne voulons pas tout effacer. Consultez l’aide de vim pour plus d’informations sur bdir, dir:

_:h bdir
:h dir
_
5
Andrew_1510

Here est le code VIM actuel générant les extensions de fichier d'échange:

/* 
 * 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. */

Cela générera des fichiers d'échange au format:

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

Ce qui est à peu près ce qui est inclus dans le propre fichier gitignore de github pour VIM .

Comme d'autres l'ont fait remarquer avec justesse, ce fichier .gitignore ignore également les fichiers image . Svg et . Swf Adobe Flash.

4
rouble

J'ai trouvé que cela aurait git ignorer les fichiers temporaires créés par vim:

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

Il peut également être consulté ici .

3
SnapShot
# 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

Le nom du fichier d'échange est normalement identique à celui du fichier que vous modifiez, avec l'extension ".swp".

  • Sous Unix, un '.' est préfixé pour échanger les noms de fichiers dans le même répertoire que le fichier modifié. Cela évite que le fichier d'échange apparaisse dans une liste de répertoires.
  • Sur les ordinateurs MS-DOS et lorsque l’option 'shortname' est activée, n’importe lequel '.' dans le fichier original, le nom est remplacé par '_'.
  • Si ce fichier existe déjà (par exemple, lorsque vous récupérez d'un crash), un avertissement est émis et une autre extension est utilisée, ".swo", ".swn", etc.
  • Un fichier existant ne sera jamais écrasé.
  • Le fichier d'échange est supprimé dès que Vim arrête de le modifier.

Le remplacement de '.' avec '_' est fait pour éviter des problèmes avec les systèmes de fichiers compatibles MS-DOS (par exemple, crossdos, multidos).

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

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

2
user31986

sûr,

il suffit de créer un ".gitignore" sur le répertoire de base de votre projet et de contenir

*.swp

c'est ça

en une commande

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

Dans mon cas, les fichiers temporaires sont déjà validés par les actions précédentes. La modification de .gitignore n’affectera donc pas les fichiers validés ..., vous devez d’abord git rm files_to_be_ignored --cache, puis commit, puis DONE.

0
ddwolf