git игнорировать временные файлы vim

238

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

jrdioko
источник
6
Шаблон *.sw?решает стандарт, .swpно также и альтернативные расширения файла подкачки как .swo.
Були
7
@buley ваше предложение также будет игнорировать .swfфайлы. Я бы настоятельно не рекомендовал делать это, особенно если вы создаете приложение Flash.
stephenmurdoch,
1
@marflar Хороший вопрос. Однако тот же шаблон с префиксом скрытого файла .должен предотвратить это.
Були
Я сегодня тоже видел .swx.
Ричард
2
Эксперимент показывает , что после создания 16 файлов резервных копий ( .tmp.swp, .tmp.swo..., .tmp.swa), ВИМ создает .tmp.svz. Мне не хватает терпения, чтобы увидеть, что будет после .tmp.saa- возможно .tmp.rzz? ОБНОВЛЕНИЕ: глядя на источник ( src/memline.c, функция findswapname()), он сдается после .saaс ошибкой: «E326: слишком много файлов подкачки найдено».
Кейт Томпсон

Ответы:

392

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

*~

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

*.swp
*.swo

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

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

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

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

nunopolonia
источник
30
Vim будет создавать последовательно именованные файлы подкачки (.swp, .swo и т.д.), поэтому я использую .*.sw*в моей , .gitignoreчтобы скрыть их всех.
Дрю Стивенс
32
@DrewStephens, я считаю, .*.sw?что будет более точным. (Хотя я видел, как люди используют какой-то вариант, *.sw*чтобы заподозрить, что я
упускаю
10
@Morten Согласно vimdoc.sourceforge.net/htmldoc/recover.html,. *. S ?? будет ловить их всех в Unix (.s ?? декременты с .swp до .saa).
Макс Нанаси
6
Просто чтобы немного расширить превосходный комментарий @MatrixFrog - поскольку этот вопрос предназначен для vim, вы можете найти правильный .gitignore в этом проекте здесь .
SnapShot
17
Быть осторожен. Github's .*.s[a-w][a-z]будет игнорировать .svgфайлы.
Джон
118

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

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

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

martinl
источник
8
обратите внимание, в Mac OS X вы можете использовать $TMPDIRдля получения фактического tempdir :)
Алекс Мур-Ниеми
5
Двойная косая черта после предпочитаемого вами каталога (я использую ~ / tmp //) предотвращает конфликты имен файлов, сохраняя полный путь. Таким образом, вы все равно можете редактировать файлы с именем, например, config.xml, в двух каталогах одновременно.
Брайан
1
Что $TEMPзначит?
themefield
Примечание, которое я также должен был добавить set undodir=$TEMP//, так как я также сохраняю постоянные файлы отмены.
Мика Линдстрем
24

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

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

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

Уильям Перселл
источник
3
Судя по всему, Бетти намного умнее Джо :-) Хороший совет и достойный голос, хотя я в конечном итоге использовал ответ от martinl (исправлял его в Vim, а не в Git).
paxdiablo
11

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

.*.swp
.*.swo

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

Анастасиос Андронидис
источник
5

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

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

set bdir-=.
set bdir+=/tmp

чтобы vim прекратил использовать текущую папку для файлов .swp:

set dir-=.
set dir+=/tmp

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

:h bdir
:h dir
Andrew_1510
источник
5
Будьте осторожны, где храните свои файлы подкачки vim. Вы можете случайно потерять учетные данные или другие данные из файла, который вы редактируете: security.stackexchange.com/questions/65883/…
Mnebuerquo
5

Вот фактический код 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]

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

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

рубль
источник
3

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

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

Это также можно посмотреть здесь .

SnapShot
источник
5
Он также будет игнорировать те надоедливые .swfфайлы, которые появляются каждый раз, когда вы создаете флэш-приложение.
Стефанмурдок,
Это прекрасно работает, если вы не разработчик, которому нужно проверять ваши Flash-файлы :-)
paxdiablo
1
Это будет игнорировать, .svgчто может быть проблемой.
Бруно Броноски
1
*.un~*~
Излишне
2

конечно,

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

*.swp

Это оно

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

project-home-directory$ echo '*.swp' >> .gitignore
forellana
источник
4
Я думаю, echo *.swp >> .gitignoreчто лучше избегать переопределения предыдущего .gitignore.
Сезар А. Ривас
2
Вы не хотите, чтобы оболочка расширяла '*'. Итак, используйтеecho '*.swp' >> .gitignore
Eddified
Вы также не хотите случайно пропустить ни одного из этих >персонажей. Однажды я сделал это с passwdфайлом, затем вышел из системы :-)
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

Имя файла подкачки обычно совпадает с именем файла, который вы редактируете, с расширением «.swp».

  • В Unix "." используется для замены имен файлов в том же каталоге, что и отредактированный файл. Это позволяет избежать появления файла подкачки в списке каталогов.
  • На машинах MS-DOS и когда включена опция 'shortname', любая '.' в оригинальном имени файла заменяется на «_».
  • Если этот файл уже существует (например, когда вы восстанавливаетесь после сбоя), выдается предупреждение и используется другое расширение: ".swo", ".swn" и т. Д.
  • Существующий файл никогда не будет перезаписан.
  • Файл подкачки удаляется, как только Vim прекращает редактирование файла.

Замена "." '_' делается для того, чтобы избежать проблем с файловыми системами, совместимыми с MS-DOS (например, crossdos, multidos).

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

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

user31986
источник
0

В моем случае временные файлы уже зафиксированы предыдущими действиями, поэтому изменение .gitignore не повлияет на эти закомментированные файлы ... git rm files_to_be_ignored --cacheсначала нужно выполнить , затем зафиксировать, а затем ВЫПОЛНИТЬ.

ddwolf
источник
0

Это работает на Mac, как отметил Алекс Мур-Ниеми:

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

Убедитесь, что используете TMPDIRи нет TEMPDIR.

полномочия
источник
-4

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

Просто отредактируйте Ваш ~ / .vimrc и добавьте эти строки:

set nobackup
set noswapfile
Арнис Лапса
источник
6
Контроль исходного кода не работает с той же степенью детализации, что и резервные копии или файлы подкачки Vim. Даже если вы выполняете коммит после каждого сохранения (или после определенного количества символов или секунд - упрощение того, что дают вам файлы подкачки Vim), очень вероятно, что вы захотите редактировать файлы, которые не контролируются источником (для каких резервных копий и файлы подкачки все еще желательны).
Крис Джонсен
8
Временные файлы VIM чрезвычайно полезны для сбоев редактора и по нескольким другим причинам. Выключить их - значит выбросить ребенка с водой из ванны.
Брайан Рихман
5
@ Арнис Скажи, отключение электричества? Или, по какой-то причине, ваш сеанс X умер. временные файлы vim очень важны для IMO.
Jrdioko
1
Сбой @jrdioko X - причина, по которой человек может захотеть использовать screen(или dtachему не нужны все функции экрана). Отключения питания обрабатываются ИБП. Резервные копии создаются {вашим любимым программным обеспечением для резервного копирования всех важных файлов}. Я использую файлы подкачки, чтобы получать уведомления при попытке отредактировать уже отредактированные файлы, резервные копии файлов, потому что наличие N + 1-го места с резервной копией не вредит и отменяет файлы, потому что постоянная отмена удобна. Только файлы отмены немного важны для меня.
ZyX
5
Вам лучше сказать vim хранить временные файлы в другом месте, чем полностью отключать их.
Кайл