2011-01-28 2 views
188

Каков правильный способ заставить git игнорировать временные файлы, созданные vim во всех каталогах (либо глобально через систему, либо локально для одного проекта)?git ignore vim временные файлы

+5

Шаблон '* .sw?' Решает стандартный '.swp', а также альтернативные расширения файлов подкачки, такие как' .swo'. – buley

+4

@buley Ваше предложение также игнорирует файлы '.swf'. Я бы категорически отказался от этого, особенно если вы создаете Flash-приложение. – stephenmurdoch

+1

@marflar Хорошая точка. Тот же шаблон с префиксом скрытого файла '.' должен помешать этому. – buley

ответ

317

Vim временные файлы заканчиваются ~, так что вы можете добавить в файл .gitignore линии

*~ 

Vim также создает файлы подкачки, которые имеют SWP и Swo расширения. удалить те использовать строки:

*.swp 
*.swo 

Это будет игнорировать все Vim временные файлы в одном проекте

Если вы хотите сделать это в глобальном масштабе, вы можете создать файл .gitignore в вашем доме (вам может дать ему другое имя или место), и используйте следующую команду:

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

Тогда вам просто нужно добавить файлы, которые вы хотите игнорировать в этот файл

+2

Я также рекомендую помещать пользовательские шаблоны в файл, указанный 'code.excludesfile' (так что'.Файл gitignore' в корне каждого проекта собирает только шаблоны проекта, а не шаблоны, чтобы избежать временных файлов с любимой платформы/редактора/автора/любого другого). Кроме того, если есть вероятность, что вы можете применить Git к своему домашнему каталогу, вы можете использовать что-то вроде '~/.git-user-excludes' для' core.excludesfile', так что '~/.gitignore' может быть используется для шаблонов, характерных для вашего домашнего каталога. –

+0

Именно поэтому я сказал, что любое имя файла или местоположение можно использовать для хранения глобального файла исключений. Что касается советов по использованию глобального исключающего файла, я полностью согласен с вами. – nunopolonia

+6

См. Также: https://github.com/github/gitignore – MatrixFrog

1

уверен,

просто создать «.gitignore» на домашней директории вашего проекта и должны содержать

*.swp 

вот оно

в одной команде

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

Я думаю, что 'echo * .swp >> .gitignore' лучше избегать переопределения предыдущий .gitignore. –

+0

Добавлено редактирование выше. –

+2

Вы не хотите, чтобы оболочка расширила '*'. Итак, используйте 'echo '* .swp' >> .gitignore' – Eddified

-3

Если Вас используют источник управления. Файлы vim temp совершенно бесполезны.
Таким образом, вы можете настроить vim, чтобы не создавать их.

Просто измените свой ~/.vimrc и добавьте следующие строки:

set nobackup 
set noswapfile 
+5

Контроль источника не работает с той же детализацией, что и резервные копии или своп-файлы Vim. Даже если вы совершали после каждого сохранения (или после определенного количества символов или секунд - упрощение того, что дает вам swapfiles Vim), все же очень вероятно, что вы захотите редактировать файлы, которые не контролируются источником (для каких резервных копий и swapfiles все же желательны). –

+0

@ Крис Я не вижу в этом упрощения. И фиксации контроля источника должны происходить часто. Но что угодно. Просто пытался помочь. –

+6

Временные файлы VIM чрезвычайно полезны для сбоев редактора и по нескольким причинам. Выключение их выбрасывает ребенка с водой для ванны. –

103

В качестве альтернативы вы можете настроить Vim для сохранения swapfiles в отдельное место, например путем добавления строки, аналогичные приведенным ниже в файле .vimrc:

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

Смотрите эту vim tip для получения дополнительной информации.

+1

+1 потому что это помогает в целом сохранить ваши каталоги чистыми! – eckes

+0

Теперь это действительно интересно ... спасибо! – jrdioko

+15

Приятно, рассматривайте причину вместо симптома :-) –

19

Это то, что должно выполняться только для каждого пользователя, а не для каждого репозитория. Если Joe использует emacs, он захочет, чтобы файлы резервных копий emacs игнорировались, но Betty (кто использует vi) захочет игнорировать файлы резервных копий vi (во многих случаях они похожи, но существует около 24 893 общих редакторов, и это довольно смешно пытаться игнорировать все различные резервные расширения.)

Другими словами, не ставьте ничего в .gitignore или в core.excludes в $GIT_DIR/config. Поместите информацию в $HOME/.gitconfig вместо этого (как предлагает nunopolonia с --global.) Обратите внимание, что «глобальный» означает для каждого пользователя, а не для каждой системы.

Если вам нужна настройка для всей системы для всех пользователей (что у вас нет), вам понадобится другой механизм. (Возможно, с настройкой шаблонов до инициализации репозитория.)

+1

Видимо, Бетти намного умнее Джо :-) Хороший совет и заслуживающий голосования, хотя я и получил ответ от martinl (исправление его в Vim, а не Git). – paxdiablo

5

Выйти vim перед "git commit".

сделать vim использования других папок для резервного копирования файлов (например, /tmp):

set bdir-=. 
set bdir+=/tmp 

сделать ВИМ прекратить использовать текущую папку для .swp файлов:

set dir-=. 
set dir+=/tmp 

Использование -=, += было бы хорошо, потому что vim имеет другие значения по умолчанию для bdir, dir, мы не хотим очищать все. Проверьте ВИМ помощь больше о bdir, реж:

:h bdir 
:h dir 
+4

Будьте осторожны, где вы храните файлы обмена vim. Вы можете случайно удалить учетные данные или другие данные из файла, который вы редактируете: http://security.stackexchange.com/questions/65883/what-sensitive-information-can-be-leaked-in-a-vims-swap-file – Mnebuerquo

6

Я также рекомендовал бы думать, чтобы игнорировать файлы, такие как:

.*.swp 
.*.swo 

, как вы можете иметь файлы, которые заканчиваются .swp

3

Я нашел, что это будет git игнорировать временные файлы, созданные vim:

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

Можно также просмотреть here.

+4

Он также игнорирует эти надоедливые '.swf' файлы, которые появляются, когда вы делаете флеш-приложение. – stephenmurdoch

+0

Что работает отлично, если вы не разработчик, который должен проверить ваши файлы Flash :-) – paxdiablo

+0

Это будет игнорировать '.svg', что может быть проблемой. –

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 

The name of the swap file is normally the same as the file you are editing, with the extension ".swp".

  • On Unix, a '.' is prepended to swap file names in the same directory as the edited file. This avoids that the swap file shows up in a directory listing.
  • On MS-DOS machines and when the 'shortname' option is on, any '.' in the original file name is replaced with '_'.
  • If this file already exists (e.g., when you are recovering from a crash) a warning is given and another extension is used, ".swo", ".swn", etc.
  • An existing file will never be overwritten.
  • The swap file is deleted as soon as Vim stops editing the file.

The replacement of '.' with '_' is done to avoid problems with MS-DOS compatible filesystems (e.g., crossdos, multidos).

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

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

2

Here является фактическим VIM код, который генерирует файл подкачки расширения:

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

Это будет генерировать файлы подкачки формата:

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

Это почти то, что включено в собственный файл gitignore github для VIM.

Как другие правильно отметили, этот .gitignore также будет игнорировать файлы изображений .svg и .swf Adobe Flash-файлы.