git 忽略太多文件

git ignores too many files

我有文件结构:

$ ls xtest/
arch.gz.keep  
raq.gz.keep
qq

$ ls xtest/qq/
ww.gz.gitkeep
aa.keep

我的.gitignore

/xtest/*
*.sql
*.gz
*.zip
*.log
!*.keep
!*.gitkeep
!*.dist
!*.dist.*

git status 未跟踪的文件:

xtest/.gitkeep
xtest/.keep
xtest/arch.gz.keep

对我来说,我还需要取消跟踪:

xtest/qq/ww.gz.gitkeep
xtest/qq/aa.keep

git --version 1.9.1 on Ubuntu 14.04

qq 文件夹中,如果它只有 ww.gz.gitkeepaa.keep 或者您希望 qq 文件夹中的所有文件都由 git 控制版本,只需删除 .gitignore 中的 /xtest/*,因此 .gitignore 看起来像:

*.sql
*.gz
*.zip
*.log
!*.keep
!*.gitkeep
!*.dist
!*.dist.*

通过在您的 .gitignore 中添加 /xtest/*,您是在指示 Git 忽略 xtest/qq。它永远不会进入该目录,也永远不会注意到有一些您不想忽略的匹配 *.keep 的文件。添加其中之一,以便 xtest/qq 不被忽略:

!/xtest/qq/
!/xtest/*/

即后者un-ignores中的所有目录xtest,前者仅qq.

我找到了解决方案,关键是我想忽略每个 file/path 从目录 'xtest' -> '/xtest/' 开始 除了一些放在 /xtest/ 中任何地方的文件 How do I add files without dots in them (all extension-less files) to the gitignore file?

也许对某些人会有所帮助: 要忽略目录 /xtest/ 中的任何文件,但不忽略任何目录和某些特定文件:

/xtest/**/*
!/xtest/**/*/
/xtest/**/cache/*
*.sql
*.gz
*.zip
*.log
!*.keep
!*.gitkeep
!*.dist
!*.dist.*

cache/ 的子目录将始终被忽略,即使有 *.keep、*.gitkeep 等但不会在第一深度被忽略到 cache/ 并且几乎所有文件将在其他目录中被忽略(进入 /xtest /) 除了 *.keep、*.gitkeep 等