Git,忽略除某些具有特定扩展名的文件之外的文件夹

Git,忽略除某些具有特定扩展名的文件之外的文件夹,git,version-control,gitignore,Git,Version Control,Gitignore,在我的git repo中有一个名为packages的文件夹,我想忽略该文件夹中的所有内容,但扩展名为targets的文件除外。我在我的gitignore中尝试过: packages/ !packages/**/*.targets packages/ 但它不起作用 如何忽略该文件夹而不是目标文件?嗯。我认为不可能使用direct.gitignore规则 然而,这应该有助于: .gitignore: packages/ !packages/**/*.targets packages/ 添

在我的git repo中有一个名为packages的文件夹,我想忽略该文件夹中的所有内容,但扩展名为targets的文件除外。我在我的gitignore中尝试过:

packages/
!packages/**/*.targets
packages/
但它不起作用


如何忽略该文件夹而不是目标文件?

嗯。我认为不可能使用direct.gitignore规则

然而,这应该有助于:

  • .gitignore:

    packages/
    !packages/**/*.targets
    
    packages/
    
  • 添加模式文件:

    git add --force -- $(find packages/ -type f -iname '*.targets')
    
您甚至可以将add添加到pre-commit钩子中,使其在新目标文件出现时自动拾取它们

要正确支持具有特殊字符的文件名,请执行以下操作:

find packages/ -type f -iname '*.targets' -exec git add --force -- {} +
这似乎适合我(Git 1.8.2.1):

我需要
*.
部分,否则
***
匹配0个目录,最后一个
*
将匹配包中的任何目录,实际上忽略每个目录和包中的任何文件


我希望
*.
对您来说不是太糟糕,但是没有扩展名的文件是非常少见的。

它似乎只忽略只有一个点的文件,所以我的许多包含多个点的文件不会被忽略,例如:packages/AttributeRouting.3.5.6/AttributeRouting.3.5.6.nupkgStrange。我在我的测试存储库中创建了确切的目录和文件名,它被正确地忽略了。星号应该自己匹配点,我唯一强迫的是至少有一个点,但两个应该被忽略。您使用的是哪个版本的Git?哪个操作系统?(我正在使用Mac OS X 10.8.4)它可能是我的版本,我正在Windows上使用1.7.11,我将签入一个更新的版本