我被 Git 弄湿了,有以下问题:
我的项目源代码树:
/ | +--src/ +----refs/ +----... | +--vendor/ +----...
我的供应商分支中有代码(当前为 MEF),我将在那里编译,然后将引用移动到/src/refs项目从中获取它们的位置。
/src/refs
我的问题是我的.gitignore设置要忽略*.dll和*.pdb. 我可以git add -f bar.dll强制添加被忽略的文件,这没关系,问题是我无法弄清楚哪些文件存在被忽略。
.gitignore
*.dll
*.pdb
git add -f bar.dll
我想列出被忽略的文件,以确保我不会忘记添加它们。
我已阅读手册页git ls-files,但无法使其正常工作。在我看来,git ls-files --exclude-standard -i应该做我想做的事。我错过了什么?
git ls-files
git ls-files --exclude-standard -i
笔记:
回答比较简单(git1.7.6+):( 详见“有没有办法告诉git-status忽略文件的影响? ”) git status --ignored .gitignore
git status --ignored
MattDiPasquale的答案](被赞成) git clean -ndX 适用于较旧的 git,显示可以删除哪些被忽略文件的 预览(不删除任何内容)
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.
注意:此解决方案不会显示已被删除的忽略文件。
也很有趣(在qwertymk的回答中提到),您也可以使用该 git check-ignore -v 命令,至少在 Unix 上(在 CMD Windows* 会话 中不起作用) *
git check-ignore -v
git check-ignore * git check-ignore -v *
第二个显示了.gitignore在你的 git repo 中忽略文件的实际规则。 在 Unix 上,使用“什么递归地扩展到当前目录中的所有文件?”和 bash4+:
git check-ignore **/*
(或find -exec命令)
find -exec
注意:在评论中建议 避免(有风险的) globstar :
git check-ignore -v $(find . -type f -print)
确保从子文件夹中排除文件.git/。
.git/
CervEd在评论中建议避免.git/:
find . -not -path './.git/*' | git check-ignore --stdin
原答案42009)
git ls-files -i
应该可以工作,除了它的源代码表明:
if (show_ignored && !exc_given) { fprintf(stderr, "%s: --ignored needs some exclude pattern\n", argv[0]);
exc_given?
exc_given
事实证明,在-i实际列出任何内容之后,还需要一个参数:
-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”文件(称为“排除”)中,我找到了一个可以帮助您的命令行:
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
git ls-files -o -i --exclude-from...
git ls-files -i --exclude-from...
-o
正如ls-files 手册页中提到的,--others是重要的部分,以便向您显示非缓存、非提交、通常被忽略的文件。
--others
--exclude_standard不仅仅是一个快捷方式,而是一种包含 所有 标准“忽略模式”设置的方法。
--exclude_standard
exclude-standard 在每个目录中 添加标准 git 排除项:.git/info/exclude,和..gitignore``user's global exclusion file
exclude-standard
.git/info/exclude
.gitignore``user's global exclusion file