Git,忽略文件夹但保留某些特定扩展名的文件。

9

我有一个名为packages的文件夹在我的git仓库中,我希望忽略该文件夹内的所有内容,但保留扩展名为targets的文件。我已经尝试在我的.gitignore文件中加入以下内容:

packages/
!packages/**/*.targets

但是它不能正常工作。

我该如何忽略该文件夹,但不忽略目标文件?

2个回答

6

这对我来说似乎有效(Git 1.8.2.1):

packages/**/*.*
!packages/**/*.targets

我需要*.*这一部分,否则**将匹配0个目录,而在末尾孤立的*将匹配包内任何目录,实际上忽略每个目录和文件。

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


它似乎只忽略只有一个点的文件,因此我的许多包含多个点的文件没有被忽略,例如:packages/AttributeRouting.3.5.6/AttributeRouting.3.5.6.nupkg。 - Escobar5
1
奇怪。我在我的测试存储库中创建了完全相同的目录和文件名,它正确地被忽略了。星号应该自己匹配点,我唯一强制的是至少有一个点,但两个点应该被忽略。您使用的Git版本是哪个?使用的操作系统是哪个?(我正在使用Mac OS X 10.8.4) - yonosoytu
可能是我的版本问题,我在Windows上使用的是1.7.11,我会检查一下更新的版本。 - Escobar5

0

嗯,我认为使用直接的.gitignore规则是不可能的。

然而,这应该会有所帮助:

  • .gitignore:

    packages/
    
  • 添加模式文件:

    git add --force -- $(find packages/ -type f -iname '*.targets')
    

你甚至可以将此添加成为一个 pre-commit 钩子,以便在新的目标文件出现时自动捕获。

为了正确支持带有特殊字符的文件名:

find packages/ -type f -iname '*.targets' -exec git add --force -- {} +

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接