Git 忽略所有 `.xlsx`,但保留指定 Excel 文件的方法

1. 目标

希望在 Git 仓库中:

  • 忽略所有 .xlsx 文件;
  • 但是特定跟踪一个文件:图片信息表v2.xlsx
  • 不想每次使用:
bash 复制代码
git add -f "图片信息表v2.xlsx"

而是希望执行:

bash 复制代码
git add .

时,图片信息表v2.xlsx 能够正常被加入暂存区。


2. 遇到的问题

一开始 .gitignore 中可能写了类似规则:

gitignore 复制代码
*.xlsx

这会导致所有 .xlsx 文件都被 Git 忽略,包括:

text 复制代码
图片信息表v2.xlsx

因此普通的:

bash 复制代码
git add .

不会添加这个文件。

只有使用强制添加:

bash 复制代码
git add -f "图片信息表v2.xlsx"

才成功。

这说明该文件确实被 .gitignore 规则忽略了。


3. 正确写法:忽略所有 xlsx,但排除指定文件

如果 图片信息表v2.xlsx 在仓库根目录,.gitignore 应该写成:

gitignore 复制代码
# 忽略所有 xlsx 文件
*.xlsx

# 但是不要忽略这个文件
!图片信息表v2.xlsx

注意:

  • !图片信息表v2.xlsx 必须写在 *.xlsx 后面;
  • 文件名必须完全一致;
  • 中文文件名可以用;
  • 路径分隔符要用 /,不要用 Windows 的 \

然后执行:

bash 复制代码
git add .

即可正常添加该文件。


4. 如果文件在子文件夹中

例如文件路径是:

text 复制代码
data/图片信息表v2.xlsx

.gitignore 应该写成:

gitignore 复制代码
*.xlsx

!data/图片信息表v2.xlsx

不要写成:

gitignore 复制代码
!data\图片信息表v2.xlsx

.gitignore 中路径统一使用 /


5. 如果整个文件夹也被忽略了

如果 .gitignore 中有类似规则:

gitignore 复制代码
data/

那么单独写:

gitignore 复制代码
!data/图片信息表v2.xlsx

通常不够,因为 Git 已经不继续检查 data/ 文件夹内部了。

这时应该写成:

gitignore 复制代码
data/*
!data/
!data/图片信息表v2.xlsx

含义是:

gitignore 复制代码
data/*                         # 忽略 data 文件夹下所有内容
!data/                         # 重新允许 Git 进入 data 文件夹
!data/图片信息表v2.xlsx          # 保留这个指定文件

6. 检查文件是否仍然被忽略

可以使用:

bash 复制代码
git check-ignore -v "图片信息表v2.xlsx"

如果文件在子文件夹中:

bash 复制代码
git check-ignore -v "data/图片信息表v2.xlsx"

情况一:有输出

例如:

text 复制代码
.gitignore:12:*.xlsx 图片信息表v2.xlsx

说明该文件仍然被 .gitignore 的某条规则忽略。

情况二:没有输出

说明该文件已经不再被忽略,之后可以直接:

bash 复制代码
git add .

7. 推荐最终配置

情况 A:文件在仓库根目录

gitignore 复制代码
# 忽略所有 Excel xlsx 文件
*.xlsx

# 保留指定文件
!图片信息表v2.xlsx

情况 B:文件在 data 文件夹中

gitignore 复制代码
# 忽略所有 Excel xlsx 文件
*.xlsx

# 保留指定文件
!data/图片信息表v2.xlsx

情况 C:data 文件夹整体被忽略

gitignore 复制代码
# 忽略 data 文件夹下所有内容
data/*

# 允许 Git 进入 data 文件夹
!data/

# 保留指定文件
!data/图片信息表v2.xlsx

8. 完整操作流程

修改 .gitignore 后,执行:

bash 复制代码
git status
git check-ignore -v "图片信息表v2.xlsx"
git add .
git status

如果 git check-ignore -v 没有输出,并且 git status 中显示:

text 复制代码
new file:   图片信息表v2.xlsx

说明配置成功。

然后提交:

bash 复制代码
git commit -m "track 图片信息表v2.xlsx"

9. 补充说明:已经被 Git 跟踪的文件

.gitignore 只影响"尚未被 Git 跟踪"的文件。

如果某个 .xlsx 文件以前已经被 Git 跟踪,那么即使后来写入 .gitignore,Git 仍然会继续跟踪它。

如果想停止跟踪某些已经被提交过的 .xlsx 文件,但保留本地文件,可以执行:

bash 复制代码
git rm --cached "*.xlsx"

然后重新添加需要保留的文件:

bash 复制代码
git add "图片信息表v2.xlsx"

最后提交:

bash 复制代码
git commit -m "ignore xlsx except 图片信息表v2.xlsx"

10. 关键结论

.gitignore 中可以通过 ! 规则取消忽略特定文件。

核心写法是:

gitignore 复制代码
*.xlsx
!图片信息表v2.xlsx

如果路径中有文件夹,统一使用 /

gitignore 复制代码
!data/图片信息表v2.xlsx

不要使用 Windows 风格的 \

相关推荐
AI导出鸭6 小时前
怎么让Grok做表格?AI导出鸭苹果版通过专属解析引擎,将Grok输出的管道表格智能还原为二维结构,一键导出Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
克里斯蒂亚诺更新9 小时前
云效和IDEA关于git的相通使用
git
Gavynlee10 小时前
Git 操作问题排查与解决方案记录(Gitee 实战)
git·elasticsearch·gitee
邪修king10 小时前
Re:Linux系统篇(十):从零上手 Git + GitHub(Ubuntu 环境实操完整版|个人代码归档必备)
linux·git·github
李可以量化10 小时前
Redis 从了解到精通(三)下:性能基准测试与量化场景性能避坑指南
redis·git·python·量化交易·qmt·ptrade
青 春 记 忆18 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
牢姐与蒯20 小时前
Linux基础开发工具之版本控制器git
git
云原生指北1 天前
Docker Sandboxes 工作区怎么接:Direct、Clone 和它们的边界
git·docker·agent
菠萝猫yena1 天前
【git】git 命令常用组合
大数据·git·elasticsearch
Liekkas Kono1 天前
aicommits 工具接入 Codex CLI 使用
git·swhl·aicommits