协慌网

登录 贡献 社区

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应该可以执行我想要的操作。我想念什么?

答案

笔记:


同样有趣(在qwertymk答案中提到),您还可以至少在 Unix 上git check-ignore -v命令(在 CMD Windows会话中不起作用)

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

.gitignore的实际规则,该规则使文件在 git repo 中被忽略。
在 Unix 上,使用 “ 是什么递归扩展到当前目录中的所有文件? ” 和 bash4 +:

git check-ignore **/*

(或find -exec命令)

注意: https : //stackoverflow.com/users/351947/Rafi B. 在注释中建议避免使用(危险的)globstar:

git check-ignore -v $(find . -type f -print)

但是,请确保从.git/子文件夹中排除文件。


原始答案 42009)

git ls-files -i

应该工作,除了它的源代码指示:

if (show_ignored && !exc_given) {
                fprintf(stderr, "%s: --ignored needs some exclude pattern\n",
                        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:\prog\git\test\.git\info>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 --ignored --exclude-from=.git/info/exclude
git ls-files -i --exclude-from=.git/info/exclude

git ls-files --others --ignored --exclude-standard
git ls-files -o -i --exclude-standard

应该做到的。

(感谢honzajde指出在评论中git ls-files -o -i --exclude-from...包括高速缓存的文件:只有git ls-files -i --exclude-from...-o )。)

ls-files 手册页中所述,-- --others是重要的部分,以便向您显示非缓存的,未提交的,通常被忽略的文件。

--exclude_standard不仅是捷径,而且是包括所有标准 “忽略模式” 设置的方式。

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

有一种简单得多的方法(git 1.7.6+):

git status --ignored

请参阅是否有一种方法可以告诉 git-status 忽略. gitignore 文件的影响?

另一个很干净的选择(无双关语):

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.

注意:此解决方案将不会显示已删除的忽略文件。