Silver Searcher未加-t参数无法检索Java文件是否属预期行为?
问题解答
这确实是Silver Searcher(ag)的预期行为,核心原因和它默认的扫描规则直接相关:
- ag默认情况下只会扫描Git仓库中已被Git追踪的文件——哪怕你的Java文件没有被任何
.gitignore忽略,只要它还没通过git add命令加入Git的追踪列表,默认搜索就不会包含它。 - 你用到的几个参数正是用来打破这个默认规则的:
-t java:强制扫描指定类型(Java)的文件,不管该文件是否被Git追踪-a:扫描所有文件,完全忽略.gitignore规则和Git追踪状态-U:专门扫描未被Git追踪的文件,同时也会跳过.gitignore的限制
验证方法
你可以用下面的命令检查这个Java文件是否被Git追踪:
git ls-files --error-unmatch {path}/StudentRowMapper.java
如果命令返回报错信息,说明该文件确实未被Git追踪,这就解释了为什么默认ag搜不到它。
解决办法
如果你希望默认的ag搜索能包含这个文件,只需要将它加入Git追踪即可:
git add {path}/StudentRowMapper.java
之后再执行不带参数的ag "ACADEMIC",就能直接搜到该Java文件的内容了。
内容的提问来源于stack exchange,提问作者Andrew Goodnough




