尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

使用 .git/info/exclude 忽略工作流专属文件:Git 本地忽略机制的完整实战指南

使用 .git/info/exclude 忽略工作流专属文件:Git 本地忽略机制的完整实战指南 文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载本篇技术指南以开源仓库tilToday I Learned中收录的 Ignore Files Specific To Your Workflow 为核心骨架深入讲解 Git 中只在本机生效、不提交进仓库的忽略方案通过仓库内的.git/info/exclude文件管理只属于个人工作流的文件并结合仓库内其他 Git 技巧笔记系统补充全局忽略文件global excludesFile、git check-ignore溯源、忽略优先级与常用排错命令。读完本文你将掌握在不污染项目.gitignore的前提下为自己的编辑器缓存、个人笔记、临时文件等建立一套完整、可复用的本地忽略工作流。为什么需要工作流专属忽略最常见的做法是把要忽略的文件写进项目的.gitignore文件。.gitignore处于版本控制之下因此凡是克隆该项目的协作者都会共享这份忽略规则。这非常合理——依赖目录、构建产物、环境变量文件这类所有人都不会提交的东西理应写在这里。但有一类文件不该放进.gitignore只属于某一个人工作习惯的文件。原文档给出了一个非常典型的场景假设我创建了一个notes.md用来给自己写项目笔记或记录几件待办事项。这个文件只属于我自己我不想提交它因为它是我的工作流特性idiosyncrasy我也不想把它写进被跟踪的.gitignore文件里。如果把这类个人文件写进.gitignore并提交等于强制所有协作者承认这个文件的存在而大多数协作者根本没有这个文件规则对他们毫无意义还会让仓库里的忽略规则变得冗长、难维护。Git 为此提供了专门的解决方案仓库的.git/info/exclude文件。核心方案.git/info/exclude文件每个 Git 仓库初始化时都会在.git目录下生成一个info/exclude文件。它位于.git内部只存在于你的本机不受版本控制不会出现在任何提交、推送或克隆结果中。Git 对待该文件中条目的方式与对待.gitignore文件完全一致——也就是说你可以在里面写文件名、目录名、通配符模式甚至是带!取反的规则语法与.gitignore相同。唯一的区别是作用域规则仅对当前这个仓库的本机生效。操作步骤沿用原文档的例子假设你在项目根目录创建了仅属于自己的notes.md编辑.git/info/exclude文件追加一行# .git/info/exclude notes.md保存后再执行git statusnotes.md将不再出现在 untracked未跟踪文件列表中。这一行代码就是全部操作。文件条目既不会被提交也不需要任何额外的 Git 命令去激活——Git 在扫描工作目录状态时会像读取.gitignore一样读取该文件详见man gitignore。同仓库还收录了一篇内容相近的笔记 Excluding Files Locally用一句话总结了同样的结论对于临时文件或本地环境专属的文件把它们写进.git/info/exclude即可在本地忽略它们且相关文件不会再以 untracked 状态出现在git status中。适用范围典型用法与边界.git/info/exclude适合承载不随项目分发的个人化规则常见场景包括个人笔记、TODO 清单、随笔草稿如notes.md、wip_notes.md编辑器或 IDE 的个人配置片段但注意跨平台通用的编辑器目录如.vscode/、.idea/通常仍应放入.gitignore与团队共享本机环境特有的临时文件、日志、探针脚本尚未决定是否纳入版本控制的实验性文件——先本地忽略之后想跟踪时删掉对应行即可。需要强调的边界是这条规则不会跟着仓库走。如果你换了一台机器重新克隆仓库.git/info/exclude不会存在notes.md会重新出现在 untracked 列表里。因此它只适合个人工作流级别的内容而不是整个团队都需要忽略的内容——后者请继续使用.gitignore。忽略规则的完整版图Git 的四层忽略来源要想用好.git/info/exclude首先需要理解它在 Git 忽略体系中的位置。同仓库的 Check How A File Is Being Ignored 明确指出本机上可以指定忽略文件的位置有好几处最常见的才是仓库的.gitignore其余位置相对隐蔽。综合来看Git 在判断一个文件是否被忽略时会按优先级从高到低依次检查以下四类来源优先级高的规则决定最终结果来源位置是否受版本控制适用场景命令行指定git add -f/git status --ignored等场景参数—临时覆盖某条忽略规则.git/info/exclude仓库.git/info/exclude否当前仓库的本地忽略全局 excludesFilecore.excludesFile指向的文件默认$XDG_CONFIG_HOME/git/ignore或~/.config/git/ignore否所有仓库通用的本机忽略项目.gitignore仓库根目录及各级子目录是随项目分发的共享忽略这一层级关系意味着同一路径在多个来源中出现时优先级高的规则会覆盖优先级低的规则且!取反符号不能跨越来源级别去复活被更高级别忽略的文件。日常使用中我们应当遵循全局规则放全局、共享规则放.gitignore、个人规则放.git/info/exclude的分层原则这也是原文档所倡导的核心思想。溯源排查用git check-ignore -v定位文件被谁忽略当你发现某个文件没有出现在 untracked 列表里却不记得是哪里配置的规则时git check-ignore就是你的定位工具。仓库笔记 Check How A File Is Being Ignored 提供了完整的排查示例$ git check-ignore -v notes.md .git/info/exclude:7:notes.md notes.md输出表明notes.md是被仓库的.git/info/exclude文件第 7 行的规则忽略的。其中-vverbose标志让命令显示忽略来源的具体文件路径、行号和匹配模式冒号分隔的三段分别是来源文件:行号:匹配模式末尾是匹配到的路径如果不加-v命令只会输出被忽略的路径本身不提供来源信息。再来看另一个示例排查.DS_StoremacOS 的目录元数据文件的来源$ git check-ignore -v .DS_Store /Users/jbranchaud/.gitignore:3:.DS_Store .DS_Store可以看到它命中的是全局忽略文件——因为作者在~/.gitconfig中把core.excludesFile配置成了~/.gitignore。这个例子完美展示了git check-ignore -v的价值面对多层忽略来源它能在几秒钟内精确告诉你这条规则到底从哪来、在哪一行。详细信息可查阅man git-check-ignore。进阶配置全局忽略文件跨仓库的本地规则如果某些文件在任何仓库里都不需要跟踪比如.DS_Store、个人草稿你不需要在每个仓库的.git/info/exclude里重复编写。Git 提供了全局级别的忽略文件配合core.excludesFile配置即可。方式一编辑~/.gitconfig仓库笔记 Configure Global gitignore File 给出了配置方法——在~/.gitconfig的[core]段下设置excludesFile[core] excludesFile ~/.gitignore然后在~/.gitignore中写下全局规则# global .gitignore .DS_Store wip_notes.md保存后任何Git 项目中列出的文件都不会再出现在 untracked 列表里。方式二一行命令搞定同样出自该笔记也可以在命令行直接设置$ git config --global core.excludesfile ~/.gitignore这条命令与手写~/.gitconfig的效果等价都会在全局配置中注册core.excludesFile。详细参数说明见man git-config中的core.excludesFile条目。关于默认路径$XDG_CONFIG_HOME/git/ignore仓库笔记 Override The Global Git Ignore File 补充了默认行为如果没有显式配置core.excludesFileGit 默认会按以下顺序查找全局忽略文件$XDG_CONFIG_HOME/git/ignore若未设置$XDG_CONFIG_HOME则回退到$HOME/.config/git/ignore因此你可以在 Linux / macOS 上这样初始化全局忽略文件$ mkdir $HOME/.config/git $ touch $HOME/.config/git/ignore之后像编辑普通.gitignore一样往里面添加规则即可。而一旦在.gitconfig中设置了excludesFile例如指向~/.gitignore该设置就会覆盖默认路径——默认的$XDG_CONFIG_HOME/git/ignore将不再被读取规则必须统一写入你指定的那个新文件。两套方案选其一即可避免写了规则却不生效的困惑。实战边界与忽略相关的其他常用技巧理解了本地忽略机制后还有一些经常与之混淆的 Git 操作这里一并梳理清楚帮助你避免踩坑。已跟踪文件想忽略本地改动git update-index --assume-unchanged.gitignore、.git/info/exclude只能作用于未被跟踪的文件。如果某个文件已经被git add并提交过忽略规则对它的改动无效。此时如果只是想在本地忽略对该文件的修改可以使用仓库笔记 Ignore Changes To A Tracked File 中的命令$ git update-index --assume-unchanged some-file该命令让 Git 假设该文件未发生变化从而在git status和git diff中忽略其本地改动。需要恢复时使用反向标志$ git update-index --no-assume-unchanged some-file注意这只是假装没变并没有真正改变文件的跟踪状态适合临时屏蔽本地配置差异等场景。确认文件是否被跟踪git ls-files --error-unmatch本地忽略规则生效的前提是文件处于 untracked 状态。如何确认仓库笔记 Check If A File Is Under Version Control 演示了git ls-files --error-unmatch的用法——该命令通过检查文件是否出现在索引index中来判断❯ git ls-files --error-unmatch README.md README.md ❯ git ls-files --error-unmatch node_modules/ai-sdk/anthropic/CHANGELOG.md error: pathspec node_modules/ai-sdk/anthropic/CHANGELOG.md did not match any file(s) known to git Did you forget to git add?被跟踪的文件会正常列出未被跟踪的文件则以报错形式提示并给出Did you forget to git add?的提示。该命令同样支持一次传入多个路径进行批量检查。让忽略规则在git status之外也彻底隐身git status的 untracked 列表会隐藏被忽略的文件但如果想彻底确认某个文件不再出现在任何 Git 输出中可以配合git check-ignore验证而若要列出当前所有未跟踪文件同仓库笔记 List Untracked Files 提供了两个不同粒度的命令# 列出所有 untracked 文件包含被忽略的 $ git ls-files --others # 只列出既 untracked 又未被忽略的文件 $ git ls-files --exclude-standard --others第二条命令中的--exclude-standard会应用包括.gitignore、.git/info/exclude和全局 excludesFile 在内的全部标准忽略规则与git status的判断逻辑一致。当你需要脚本化处理真正待添加的文件时它是更可靠的选择。总结三句话建立你的本地忽略工作流个人专属、不想共享的文件笔记、草稿、本机临时文件→ 写入仓库的.git/info/exclude只影响当前仓库、不进版本控制所有仓库通用的个人规则如.DS_Store→ 配置core.excludesFile指向的全局忽略文件或使用默认的$HOME/.config/git/ignore团队共享、随项目分发的规则依赖目录、构建产物、环境文件→ 继续使用项目.gitignore。遇到文件神秘消失或意外出现时先用git check-ignore -v file定位规则的来源文件与行号再按上述分层原则决定规则该放哪一层。这套机制不依赖任何第三方工具是纯 Git 原生的能力值得每个开发者纳入日常工作流。本文涉及的所有示例与技巧均来自til仓库的 Git 专题笔记可在 git/ 目录下继续查阅如 Excluding Files Locally、Configure Global gitignore File、Check How A File Is Being Ignored 等。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐isomorphic-git isIgnored 深入解析基于 .gitignore 与 .git/info/exclude 的忽略判定isomorphic git isIgnored 深入解析基于 .gitignore 与 .git/info/exclude 的忽略判定 isIgnored开发工具obsidian-git忽略文件配置.gitignore使用指南obsidian git忽略文件配置.gitignore使用指南 你是否还在为Obsidian库 Git仓库 中混入大量临时文件、配置数据而烦恼是否担心同步开发工具版本控制symfony/finder高级实战实现Git风格的文件忽略系统symfony/finder高级实战实现Git风格的文件忽略系统 痛点直击为什么文件忽略如此重要 你是否曾在项目中遇到过这些问题遍历目录时总是包含大量不开发工具上一篇如何用llama2-webui实现代码智能补全CodeLlama实战教程下一篇PinView继承EditText这些白嫖到的强大API你都知道吗创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表