Git: .gitignore en subdirectorys

Estoy tratando de administrar neovim mi init.vim con git. Quiero ignorar todo excepto el init.vim en la misma carpeta que el .gitignore y un kalisi.vim en el directory

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

Este es mi actual .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 

Mis pensamientos sobre esto:

  • Ignora todo: *

  • Excepto este .gitignore !.gitgnore

  • Y el init.vim en el mismo directory !init.vim

  • Además, no ignore el bundle carpetas bundle !bundle

  • Pero todo en él: bundle/*

  • Excepto la carpeta vim-airline !vim-airline

Creo que entiendes la idea …

Pero si ejecuto el git status ahora solo obtengo el bundle/ como file sin seguimiento. ¿No debería get kalisi.vim o bundle/vim-airline/autoload/airline/themes/kalisi.vim ?

Estoy esperando una forma más elegante de ser honesto. También escuché sobre la colocación de múltiples .gitignore en los directorys, pero los subdirectorys son todos proyectos con su propio .gitignore y esto crearía una gran cantidad de trabajo para no solo ignorar el .gitignore correcto.

Espero que alguien tenga una idea de qué hacer, actualmente parece que se sigue el directory del bundle/ , pero no el contenido que quiero …

Como mencioné en " ¿Cómo agrego files sin puntos en ellos (todos los files sin extensión) al file gitignore? ", Hay una regla para recordar con .gitignore :

No es posible volver a include un file si se excluye un directory principal de ese file. ( )
( : a less que se cumplan ciertas condiciones en git 2.7+)

Esto significa que, cuando excluye todo (' * '), tiene que poner en list blanca las carpetas (' /**/ '), antes de poder hacer una list blanca de los files.

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

El OP LastSecondsToLive realmente tomó un enfoque más simple:

bundle/vim-airline/autoload/airline/themes/kalisi.vim un commit con bundle/vim-airline/autoload/airline/themes/kalisi.vim luego bundle/vim-airline/autoload/airline/themes/kalisi.vim mi .gitignore a: * !.gitinore !init.vim para ignorar todo, pero desde bundle/vim-airline/autoload/airline/themes/kalisi.vim ya se ha rastreado, los cambios serán rastreados en el futuro.