如何在Git中忽略某个目录及其子目录中特定文件类型?

10

如何在一个目录及其子目录中仅忽略某种文件类型?

为了解释我的意思,想象以下设置:

  • anotherdir/
    • seeme1.iml
  • foldertoignore/
    • ignoreme1.iml
    • seeme3.txt
    • anotherignorefolder/
      • ignoreme2.iml
      • seeme4.txt
  • seeme5.iml

我想要做的是告诉git(使用.gitignore文件)只在 foldtertoignore 目录下忽略*.iml文件。

我认为这将起作用:

foldertoignore/*.iml

但是这只找到了ignoreme1.iml而没有找到ignoreme2.iml

我知道如何告诉它忽略*.iml,但不包括特定目录。这与其相反。有什么想法吗?

2个回答

8

.gitignore规则递归地应用于包含目录。只需创建文件foldertoignore/.gitignore并将*.iml作为其内容即可。

>>foldertoignore/.gitignore echo '*.iml'
git add foldertoignore/.gitignore
git commit -m 'Ignore .iml files in foldertoignore and its subfolders'

1
你可以尝试这个:
/foldertoignore/**/*.iml

根据我所知,它可能会或可能不会在您的操作系统中取决于fnmatch实现而起作用。另一种选择是:

*.iml
!/anotherdir/*.iml
!/*.iml

在Windows上使用msysgit时,'**'似乎不会递归地应用(正如在https://dev59.com/rXNA5IYBdhLWcg3wa9Gp#971523,https://dev59.com/1nNA5IYBdhLWcg3wWsiK#991873中已经看到的,并在这里详细解释:https://dev59.com/p3E85IYBdhLWcg3wMAfc#2902126)。 - VonC
@Vonc - 我不是说这可能行不通吗?我也不认为OP提到了msysgit? - manojlds
@Vonc - 是的,knittl的回答是合适的,但我喜欢从仓库的根目录管理单个gitignore。所以如果**对OP有效,我会建议使用它。否则,采用knittl的答案。 - manojlds
我完全同意。但是很不幸的是,我从未在Windows上做到过这一点。如果发帖人不在Windows上操作,他/她应该知道选择哪个答案 ;) - VonC

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