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

如何通过.gitignore实现Git仅提交指定目录并排除其他内容

Git仅提交指定目录的.gitignore正确配置方案

之前两种写法失效的本质原因

Git的忽略规则存在一个核心判定逻辑:只要某条规则把目录标记为忽略,Git会直接跳过对该目录的递归扫描,不会主动读取目录内的内容;哪怕后续通过否定规则把目录本身从忽略列表中捞回来,目录内部的路径依然会被全局忽略规则拦截。同时同层级的忽略规则遵循“越靠后优先级越高”的判定顺序。

  • 第一种写法* + !releases:仅把releases目录本身从全局忽略列表中解禁,但没有处理目录内部文件的匹配规则,releases里的所有内容依然被开头的*规则标记为忽略,加上Git本身不跟踪空目录结构,最终就会出现提交后没有任何有效内容被追踪的问题。
  • 第二种写法* + !releases/:和第一种问题完全一致,斜杠后缀只是明确将releases识别为目录类型,并没有解决“目录内部内容被全局规则拦截”的核心矛盾。

可满足需求的正确.gitignore配置

在项目根目录的.gitignore文件中写入以下规则即可实现“仅提交releases目录及全部内容,其余文件/文件夹全部排除”的效果:

# 匹配根目录下所有文件、文件夹,初始状态全部忽略
*
# 解禁releases目录本身,允许Git对该目录做递归扫描
!releases/
# 匹配releases目录下所有层级的文件、子目录,全部取消忽略状态
releases/**

规则匹配逻辑

  • 开头的* 作用范围为项目根目录,会把需求中提到的node_modules、js、ts文件夹,以及package.json文件全部匹配为忽略状态,从根源上排除非目标内容。
  • !releases/ 打破全局规则对releases目录的拦截,避免Git因为全局规则直接跳过该目录的扫描流程。
  • 最后的releases/** 优先级高于开头的全局*规则,会打通releases目录下所有层级的访问权限,确保目录内的所有文件、嵌套子目录都不会被全局*规则误拦截。

配置后的必要操作

如果此前的Git提交记录中已经包含了node_modules、js、ts、package.json这类非目标内容,仅修改.gitignore不会把这些文件从Git的追踪列表中移除,需要执行一次本地追踪缓存清理:

# 清除所有已追踪文件的本地缓存,不会修改本地磁盘上的实际文件
git rm -r --cached .
# 按照最新的.gitignore规则重新加载需要追踪的内容
git add .
# 生成新的提交记录
git commit -m "调整忽略规则,仅追踪releases目录内容"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 09:36:04