GIT:如何列出文件夹中的所有gitignore规则

时间:2017-07-31 09:31:39

标签: git gitignore

我想要做的是列出文件夹中的所有gitignore规则。假设以下文件夹结构:

project/
project/folderA/

现在,如果我想为整个项目制定一些gitignore规则,我会将其放在project/.gitignore中,但我也可以在project/folderA/.gitignore添加一些规则,据我了解,仅适用于project/folderA及其子文件夹。

现在假设我在.gitignore个文件中都有一些规则,并且我在project/folderA,我如何列出适用于此处的所有gitignore规则?我需要查看从父文件夹继承的那些和当前文件夹中存在的那些的所有联合。

您可以使用以下命令:

git check-ignore *

会直接列出当前文件夹下被忽略的所有内容,如果添加-v选项,它还会显示导致其被忽略的规则。

我需要的不是给出一个例子,看看它是否被忽略,我只需要查看适用于当前文件夹的所有规则。

编辑:有人建议子文件夹中的.gitignore文件会覆盖父文件,只需要检查该文件。我已经使用git版本2.13.3进行了测试,但这不是它的工作原理。如果我在父文件夹中有patternA,则在子文件夹中会忽略它,即使我在子文件夹的.gitignore文件中没有相同的模式。

编辑2 :请考虑以下工作示例:

[user@machine tmp]$ mkdir test
[user@machine tmp]$ cd test/
[user@machine test]$ git init
Initialized empty Git repository in /tmp/test/.git/
[user@machine test]$ echo "a">.gitignore
[user@machine test]$ mkdir p
[user@machine test]$ cd p
[user@machine p]$ echo "b">.gitignore
[user@machine p]$ echo "c">.gitignore
[user@machine p]$ touch a 
[user@machine p]$ touch b
[user@machine p]$ cd ..
[user@machine test]$ touch a
[user@machine test]$ touch b
[user@machine test]$ git add .
[user@machine test]$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   .gitignore
    new file:   b
    new file:   p/.gitignore

[user@machine test]$ cd p
[user@machine p]$ git list-git-ignore-rules-applied-here <-- hypothetical

如您所见,父文件夹中唯一的规则是ap文件夹中的两个规则是ab,因此不再是在git add .之后跟踪的那些创建文件。现在该示例代码的最后一行是我需要的,它应该给我输出:

a
b
c

1 个答案:

答案 0 :(得分:0)

正如manual所述:

  

“更高级别文件中的模式(直到工作的顶层)   树)被低层文件中的那些覆盖到了   包含该文件的目录。“

因此,只有一个.gitignore文件应用于您的子目录,因此对于应用的规则,您只需要读出一个文件。