Git: 子目录中的 .gitignore
Git: .gitignore in subdirectories
我正在尝试用 git 管理我的 neovim
的 init.vim
。
我想忽略除 .gitignore
所在文件夹中的 init.vim
和目录
中的一个 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
的项目,这会产生大量工作,只不忽略正确的 [=15] =].
我希望有人知道该怎么做,目前似乎 bundle/
目录被跟踪了,但没有我想要的内容...
正如我在“How do I add files without dots in them (all extension-less files) to the gitignore file?”中提到的,有一条规则需要记住 .gitignore
:
It is not possible to re-include a file if a parent directory of that file is excluded. (†
)
(†
:除非在git 2.7+中满足某些条件)
这意味着,当您排除所有内容 ('*
') 时,您必须先将文件夹列入白名单 ('/**/
'),然后才能将文件列入白名单。
# Ignore everything
*
# Exceptions
!.gitinore
!init.vim
!/**/
!bundle/vim-airline/autoload/airline/themes/kalisi.vim
OP LastSecondsToLive实际上采用了更简单的方法:
I created a commit with bundle/vim-airline/autoload/airline/themes/kalisi.vim
then I switched my .gitignore
back to:* !.gitinore !init.vim
to ignore everything, but since bundle/vim-airline/autoload/airline/themes/kalisi.vim
is already tracked, changes will get tracked in the future.
我正在尝试用 git 管理我的 neovim
的 init.vim
。
我想忽略除 .gitignore
所在文件夹中的 init.vim
和目录
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
的项目,这会产生大量工作,只不忽略正确的 [=15] =].
我希望有人知道该怎么做,目前似乎 bundle/
目录被跟踪了,但没有我想要的内容...
正如我在“How do I add files without dots in them (all extension-less files) to the gitignore file?”中提到的,有一条规则需要记住 .gitignore
:
It is not possible to re-include a file if a parent directory of that file is excluded. (†
)
(†
:除非在git 2.7+中满足某些条件)
这意味着,当您排除所有内容 ('*
') 时,您必须先将文件夹列入白名单 ('/**/
'),然后才能将文件列入白名单。
# Ignore everything
*
# Exceptions
!.gitinore
!init.vim
!/**/
!bundle/vim-airline/autoload/airline/themes/kalisi.vim
OP LastSecondsToLive实际上采用了更简单的方法:
I created a commit with
bundle/vim-airline/autoload/airline/themes/kalisi.vim
then I switched my.gitignore
back to:* !.gitinore !init.vim
to ignore everything, but sincebundle/vim-airline/autoload/airline/themes/kalisi.vim
is already tracked, changes will get tracked in the future.