Git command to show which specific files are ignored by .gitignore

I am getting my feet wet on git and have the following issue:

My project source tree:

/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...

I have code (currently MEF) in my vendor branch that I will compile there and then move the references into /src/refs which is where the project picks them up from.

My issue is that I have my .gitignore set to ignore *.dll and *.pdb . I can do a git add -f bar.dll to force the addition of the ignored file which is ok, the problem is I can not figure out to list what files exist that are ignored.

I want to list the ignored files to make sure that I don't forget to add them.

I have read the man page on git ls-files and can not make it work. It seems to me that git ls-files --exclude-standard -i should do what I want. What am I missing?

UPDATE:

git ls-files -i will not work, you get the error:

ls-files: --ignored needs some exclude pattern

git ls-files --others -i --exclude-from=.git/info/exclude as VonC suggested below is indeed the answer. The --exclude-standard option also works instead of --exclude-from .

Summary of what works:

git ls-files --others -i --exclude-from=.git/info/exclude
git ls-files --others -i --exclude-standard

Notes:

  • xiaobai's answer is simpler (git1.7.6+): git status --ignored
    (as detailed in "Is there a way to tell git-status to ignore the effects of .gitignore files?")
  • MattDiPasquale's answer (to be upvoted) git clean -ndX works on older gits, displaying a preview of what ignored files could be removed (without removing anything)

  • Also interesting (mentioned in qwertymk's answer), you can also use the git check-ignore -v command, at least on Unix ( doesn't work in a CMD Windows session)

    git check-ignore *
    git check-ignore -v *
    

    The second one displays the actual rule of the .gitignore which makes a file to be ignored in your git repo.
    On Unix, using "What expands to all files in current directory recursively?" and a bash4+:

    git check-ignore **/*
    

    (or a find -exec command)


    Original answer 42009)

    git ls-files -i
    

    should work, except its source code indicates:

    if (show_ignored && !exc_given) {
                    fprintf(stderr, "%s: --ignored needs some exclude patternn",
                            argv[0]);
    

    exc_given ?

    It turns out it need one more parameter after the -i to actually list anything:

    Try:

    git ls-files -i --exclude-from=[Path_To_Your_Global].gitignore
    

    (but that would only list your cached (non-ignored) object, with a filter, so that is not quite what you want)


    Example:

    $ cat .git/ignore
    # ignore objects and archives, anywhere in the tree.
    *.[oa]
    $ cat Documentation/.gitignore
    # ignore generated html files,
    *.html
    # except foo.html which is maintained by hand
    !foo.html
    $ git ls-files --ignored 
        --exclude='Documentation/*.[0-9]' 
        --exclude-from=.git/ignore 
        --exclude-per-directory=.gitignore
    

    Actually, in my 'gitignore' file (called 'exclude'), I find a command line that could help you:

    F:proggittest.gitinfo>type exclude
    # git ls-files --others --exclude-from=.git/info/exclude
    # Lines that start with '#' are comments.
    # For a project mostly in C, the following would be a good set of
    # exclude patterns (uncomment them if you want to use them):
    # *.[oa]
    # *~
    

    So....

    git ls-files --others --ignored --exclude-from=.git/info/exclude
    git ls-files -o -i --exclude-from=.git/info/exclude
    
    git ls-files --others --ignored --exclude-standard
    git ls-files -o -i --exclude-standard
    

    should do the trick.

    As mentioned in the ls-files man page, --others is the important part, in order to show you non-cached, non-committed, normally-ignored files.

    --exclude_standard is not just a shortcut, but a way to include all standard "ignored patterns" settings.

    exclude-standard
    Add the standard git exclusions: .git/info/exclude , .gitignore in each directory, and the user's global exclusion file .


    Another option that's pretty clean (No pun intended.):

    git clean -ndX
    

    Explanation:

    $ git help clean
    
    git-clean - Remove untracked files from the working tree
    -n, --dry-run - Don't actually remove anything, just show what would be done.
    -d - Remove untracked directories in addition to untracked files.
    -X - Remove only files ignored by git.
    

    Note: This solution will not show ignored files that have already been "cleaned."

    EDIT:

    It is possible for this method to not catch all files which are ignored by git status . See here for examples.


    There is a much simpler way to do it (git 1.7.6+):

    git status --ignored

    See Is there a way to tell git-status to ignore the effects of .gitignore files?

    链接地址: http://www.djcxy.com/p/45160.html

    上一篇: 如何.gitignore文件夹中的所有文件/文件夹,但不是文件夹本身?

    下一篇: Git命令显示哪些特定文件被.gitignore忽略