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

我在git上弄湿了自己的脚,并遇到以下问题:

我的项目源代码树:

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

我的供应商分支中有代码(目前是MEF),我将在那里编译,然后将引用移动到/src/refs ,这是项目从中选择它们的地方。

我的问题是,我的.gitignore设置为忽略*.dll*.pdb 。 我可以做一个git add -f bar.dll来强制添加被忽略的文件,这是好的,问题是我无法弄清楚哪些文件存在被忽略。

我想列出忽略的文件,以确保我不会忘记添加它们。

我已经阅读了关于git ls-files的手册页,并且无法使其工作。 在我看来, git ls-files --exclude-standard -i应该做我想做的事。 我错过了什么?

更新:

git ls-files -i将不起作用,您会收到错误消息:

ls-files: --ignored needs some exclude pattern

git ls-files --others -i --exclude-from=.git/info/exclude下面建议的VonC确实是答案。 --exclude-standard选项也可以替代--exclude-from

什么工作总结:

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

笔记:

  • 小白的答案很简单(git1.7.6 +): git status --ignored
    (如“有没有办法告诉git-status忽略.gitignore文件的影响?”)
  • MattDiPasquale的答案(被upvoted) git clean -ndX适用于较旧的gits,显示可以删除被忽略文件的预览(不删除任何内容)

  • 同样有趣的是(在qwertymk的回答中提到),至少在Unix上也可以使用git check-ignore -v命令(在CMD Windows会话中不起作用

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

    第二个显示的.gitignore的实际规则,使您的git .gitignore中的文件被忽略。
    在Unix上,使用“什么以递归方式扩展到当前目录中的所有文件?” 和一个bash4 +:

    git check-ignore **/*
    

    (或find -exec命令)


    原始答案42009)

    git ls-files -i
    

    应该工作,除了它的源代码表明:

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

    exc_given

    事实证明,在-i之后需要多一个参数来实际列出任何内容:

    尝试:

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

    (但那只会列出你的缓存(不被忽略)对象,带有一个过滤器,所以这不是你想要的)


    例:

    $ 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
    

    实际上,在我的'gitignore'文件(称为'exclude')中,我找到了一个可以帮助您的命令行:

    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]
    # *~
    

    所以....

    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
    

    应该做的伎俩。

    正如在ls-files手册页中提到的, - 为了向您展示非缓存的,未提交的,通常被忽略的文件, --others部分是非常重要的部分。

    --exclude_standard不仅仅是一个快捷方式,而是一种包含所有标准“忽略模式”设置的方法。

    exclude-standard
    在每个目录中添加标准的git排除项: .git/info/exclude.gitignoreuser's global exclusion file


    另一个选项很干净(没有双关语意思):

    git clean -ndX
    

    说明:

    $ 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.
    

    注意:此解决方案不会显示已被“清除”的忽略文件。

    编辑:

    这种方法可能不会捕获git status忽略的所有文件。 请看这里的例子。


    有一个更简单的方法来做到这一点(git 1.7.6+):

    git status --ignored

    请参阅是否有办法告诉git-status忽略.gitignore文件的影响?

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

    上一篇: Git command to show which specific files are ignored by .gitignore

    下一篇: Obscuring database id's