Git: .gitignore в подкаталогах

Я пытаюсь управлять своим neovim "s init.vim с мерзавцем Я хочу игнорировать все, кроме init.vim в той же папке, что и .gitignore и один kalisi.vim в каталоге

/bundle/vim-airline/autoload/airline/themes/

Это мой ток .gitignore :

# Ignore everything
*

# Exceptions
!.gitinore
!init.vim

!bundle
bundle/*
!bundle/vim-airline
bundle/vim-airline/*
!bundle/vim-airline/autoload
bundle/vim-airline/autoload/*
!bundle/vim-airline/autoload/airline
bundle/vim-airline/autoload/airline/*
!bundle/vim-airline/autoload/airline/themes
bundle/vim-airline/autoload/airline/themes/*
!bundle/vim-airline/autoload/airline/themes/kalisi.vim

Мои мысли по этому поводу:

  • Игнорировать все: *

  • Кроме этого .gitignore: !.gitgnore

  • И init.vim в том же каталоге: !init.vim

  • Также не игнорируйте папку bundle: !bundle

  • Но все в этом bundle/*

  • Кроме папки vim-airline: !vim-airline

Я думаю, вы поняли идею...

Но если я выполню git status теперь только получить bundle/ как неотслеживаемый файл. Должен ли я получить kalisi.vim или же bundle/vim-airline/autoload/airline/themes/kalisi.vim?

Я надеюсь на более элегантный способ быть честным. Я также слышал о размещении нескольких .gitignore находится в каталогах, но подкаталоги - это все проекты со своими собственными .gitignore и это создаст огромный объем работы, чтобы только не игнорировать право .gitignore,

Я надеюсь, что у кого-то есть идея, что делать, в настоящее время это только кажется bundle/ каталог отслеживается, но не содержание, которое я хочу...

1 ответ

Решение

Как я уже упоминал в разделе " Как добавить файлы без точек (все файлы без расширений) в файл gitignore? ", Есть одно правило, которое следует запомнить при .gitignore:

Невозможно повторно включить файл, если родительский каталог этого файла исключен. ( )
(: если в git 2.7+ не выполнены определенные условия)

Это означает, что когда вы исключаете все (' * '), вы должны в белый список папок (' /**/ '), прежде чем иметь возможность занести в белый список файлы.

# Ignore everything
*

# Exceptions
!.gitinore
!init.vim
!/**/
!bundle/vim-airline/autoload/airline/themes/kalisi.vim

LastSecondsToLive фактически использовал более простой подход:

Я создал коммит с bundle/vim-airline/autoload/airline/themes/kalisi.vim потом я поменял .gitignore вернуться к: * !.gitinore !init.vim игнорировать все, но так как bundle/vim-airline/autoload/airline/themes/kalisi.vim уже отслежены, изменения будут отслеживаться в будущем.

Другие вопросы по тегам