拓冰建站拓冰建站
首页 / 资讯中心 / 正文

fd 在非 Git 目录中 .gitignore 规则不生效怎么解决?

fd 在非 Git 目录中 .gitignore 规则不生效怎么解决【免费下载链接】fdA simple, fast and user-friendly alternative to find项目地址: https://gitcode.com/GitHub_Trending/fd/fd在一个没有git init过的普通目录里放好.gitignore再运行fd PATTERN被忽略规则命中的文件仍然照常出现在搜索结果里。这不是 fd 出错了而是它的默认行为fd 只在检测到当前搜索位于 git 仓库内时才会应用全局 gitignore 规则、.gitignore规则和局部排除规则。因此在非 Git 目录中当前目录的.gitignore根本不会被加载。解决办法是给 fd 加上--no-require-git参数放松这个必须在 git 仓库内的限制。先确认原因fd 默认的 ignore 作用范围fd 的默认行为有两层容易混淆在 git 仓库内fd 会跳过所有匹配.gitignore模式的文件和目录同时也会排除.git/info/exclude、全局 gitignore 配置默认$HOME/.config/git/ignore、.ignore、.fdignore以及 fd 全局忽略文件通常位于$HOME/.config/fd/ignore中命中的内容。在非 git 目录中fd 只应用全局 gitignore 规则和局部排除规则当前目录里的.gitignore文件不会生效。这正是在 Git 目录里.gitignore能过滤、换个普通目录就不过滤的原因。fd 手册doc/fd.1中对--no-require-git的说明By default, fd will only respect global gitignore rules, .gitignore rules and local exclude rules if fd detects that you are searching inside a git repository. This flag allows you to relax this restriction such that fd will respect all git related ignore rules regardless of whether youre searching in a git repository or not.解决步骤1. 确认 fd 版本不低于 v8.7.0--no-require-git是 v8.7.0 引入的参数见 CHANGELOG.md。如果本机 fd 更旧需要先升级 fd 才能使用它fd --version2. 给搜索命令加上--no-require-git在非 Git 目录中把原来的搜索命令改为fd --no-require-git PATTERN其中PATTERN替换为你原来的搜索模式正则或配合--glob的 glob。指定其他搜索路径时同理例如fd --no-require-git PATTERN /path/to/dir。加上这个参数后无论目录是否属于 git 仓库fd 都会加载并应用所有 git 相关的忽略规则包括当前目录的.gitignore。该参数可以被--require-git反向覆盖如果你在同一条命令行中两者都传了以显式覆盖关系为准。3. 验证规则是否生效用一次前后对比来验证这是文档中-I选项示例fd num_cpu与fd -I num_cpu输出不同所示范的对比方式# 加参数前被 .gitignore 命中的文件会出现在结果中 fd PATTERN # 加参数后这些文件应当从结果中消失 fd --no-require-git PATTERN判断标准来自文档对参数的描述如果第二次命令的结果中不再包含.gitignore规则命中的文件说明规则已经生效。注意 fd 默认还会跳过隐藏文件如果目标文件本身是隐藏的需要用-H/--hidden同时放开隐藏过滤再观察 ignore 规则的作用见下方注意事项。如果你想要的其实是相反效果排查时如果发现目标是让 fd不要理会.gitignore例如强制搜出被忽略的构建产物则应使用文档中的另一组参数而不是--no-require-git# 只跳过 git 相关忽略规则.gitignore、.git/info/exclude、全局 gitignore 配置 fd --no-ignore-vcs PATTERN # 跳过全部忽略来源上面这些外加 .ignore、.fdignore 和全局 fd 忽略文件 fd -I PATTERN # 或等价写法 fd --no-ignore PATTERN # 同时包含隐藏文件 所有被忽略文件 fd -u PATTERN这三个参数在 README.md 的 Hidden and ignored files 一节中有说明-u/--unrestricted等价于--hidden --no-ignore的组合。把参数设为默认fd 手册的 Tips and Tricks 一节给出了通用做法用 shell alias 给 fd 固定附加参数文档中的示例是alias fd/usr/bin/fd --no-ignore-vcs同理如果你希望--no-require-git成为默认行为可以把 alias 改为附加--no-require-git并写入~/.bashrc。改完后新开终端执行fd PATTERN验证非 Git 目录下的过滤是否自动生效。注意 alias 只对当前 shell 会话之后的新命令起作用已经打开的终端需要重新 source 配置文件或重开。注意事项与边界版本要求--no-require-git需要 v8.7.0 及以上的 fd旧版本上该参数不存在。-H不改变 ignore 行为手册在-H/--hidden下明确说明被忽略的文件仍然会被排除除非同时使用--no-ignore或--no-ignore-vcs。所以搜不到文件时先分清是隐藏过滤还是 ignore 规则在起作用。fd 专属的.fdignore如果你的目的只是让 fd 在某棵树中额外排除一些路径也可以不依赖 gitignore 语义改用.fdignore作用类似.gitignorefd 专属即使用了--no-ignore-vcs依然生效或全局忽略文件Linux/macOS 上通常位于~/.config/fd/ignoreWindows 上位于%APPDATA%\fd\ignore见手册 FILES 一节及 README.md 的 Excluding specific files or directories。--exclude的优先级-E/--exclude的 glob 排除会覆盖其他 ignore 逻辑适合临时精确定向排除某个模式例如fd -H -E .git PATTERN。【免费下载链接】fdA simple, fast and user-friendly alternative to find项目地址: https://gitcode.com/GitHub_Trending/fd/fd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门