Git 1.8.3中git ls-files --others --exclude-standard不显示未追踪文件问题
为什么
git ls-files看不到被忽略的文件但git clean -x能? 这事儿其实是Git命令参数的差异导致的,再加上你用的是比较老的Git版本(1.8.3),咱们拆开来说清楚:
核心原因:两个命令的参数逻辑完全不同
1. 先看你执行的git ls-files --others --exclude-standard
这个命令的作用拆解下:
--others:列出所有未被Git追踪的文件--exclude-standard:应用Git默认的忽略规则(包括你的.gitignore、仓库内的.git/info/exclude,还有全局的忽略配置)
合起来,这个命令只会输出未被追踪且没有被任何忽略规则匹配的文件。你的工作区里这类文件不存在,所以无输出,这和git status显示“工作区干净”是完全一致的——毕竟Git不会把被忽略的未追踪文件当成“待处理的未追踪文件”展示在status里。
2. 再看git clean -fdxn
这里的关键是那个-x参数!它的作用是:让git clean把被.gitignore忽略的文件也纳入处理范围。
- 默认情况下(不加
-x),git clean只会处理那些未被追踪且不被忽略的文件 - 加上
-x之后,它就会把被忽略的未追踪文件也列出来(-n是预览模式,不会真的删除文件)
你可以验证下:去掉-x执行git clean -fdn,这时候应该就看不到那些welcome.html这类被忽略的文件了。
如何让git ls-files也显示被忽略的文件?
如果你想用git ls-files看到那些被忽略的未追踪文件,只需要加上--ignored参数,执行:
git ls-files --others --ignored --exclude-standard
这样输出的内容就会和git clean -fdxn列出的完全对应上了。
最后补一句:你的Git版本1.8.3确实有点老了,虽然这个参数逻辑在新版本里没怎么变,但如果有条件的话,升级到更新的版本会少遇到一些奇怪的小问题哦。
内容的提问来源于stack exchange,提问作者kittygirl
相关产品推荐
相关产品推荐

