You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.gitignore规则疑问:忽略temp目录但排除指定文件与子目录的写法差异

三种.gitignore写法的差异分析

先明确你的核心需求:忽略temp目录下的所有内容,但保留temp/some.txt文件,同时保留temp/bin整个目录(包括其内部所有内容)。下面逐个拆解三种写法的区别:

第一种写法(你的初始写法)

temp/*
!temp/some.txt
!temp/bin
  • temp/*:忽略temp下所有直接子文件和子目录
  • !temp/some.txt:取消忽略这个文件,确保它被Git追踪
  • !temp/bin:取消忽略temp/bin这个项——不管它是文件还是目录。如果是目录,Git会恢复对这个目录的扫描,其内部所有未被其他规则忽略的内容都会被追踪。在你的场景里bin是子目录,所以整个bin目录及其内容都会被保留。

第二种写法(带斜杠的bin规则)

temp/*
!temp/some.txt
!temp/bin/

和第一种的核心差异在!temp/bin/:

  • 斜杠/明确表示只匹配目录,不会匹配同名文件。如果temp下刚好有个名为bin的文件,这个规则不会取消对它的忽略;而第一种写法会取消忽略这个文件。
  • 对于你的场景(bin是子目录),效果和第一种几乎完全一致,bin目录及其内容都会被保留。

第三种写法(匹配bin下的内容)

temp/*
!temp/some.txt
!temp/bin/*

这个写法存在问题:

  • temp/*已经忽略了temp/bin目录本身,Git会直接跳过这个目录的扫描,不会读取里面的内容。所以!temp/bin/*这个规则根本不会生效——父目录被忽略时,子项的取消忽略规则不起作用。
  • 最终结果是:temp/bin目录仍被忽略,其内部所有内容也不会被Git追踪,完全不符合你的需求。

内容的提问来源于stack exchange,提问作者Smth_Unknown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:48:16