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 风格的 \

相关推荐
菠萝加点糖6 小时前
Git 删除远程文件、本地保留并取消跟踪
git
理智.6299 小时前
Git 工具使用之项目版本回退与修改备份:stash、reset、reflog 常用指令详解
git·gitee·github
weixin_4935036711 小时前
商会系统里的在线文件预览:PDF/Word/Excel 三种实现与选型(Node + 前端实战)
pdf·word·excel
妙码生花11 小时前
GIT 提交规范
git
asdzx6714 小时前
Python 解析 Excel 数据、图片与图表的实现方案
python·excel
云雀衔光14 小时前
多个 MCP Server 怎么编排:数据库 / Redis / Git / 飞书一把梭
java·数据库·人工智能·redis·git·语言模型·飞书
慧都小妮子14 小时前
GcExcel 服务端 Excel 组件:无需安装 Office 的 Java/.NET 报表方案
java·.net·excel·gcexcel·服务端excel组件
Java后端的Ai之路15 小时前
Git pull弹出vim编辑器完整排查指南
开发语言·人工智能·git·编辑器·vim
云泽8081 天前
Git 版本控制系统(下):从 .git 目录结构到冲突解决机制详解
大数据·git·elasticsearch
The Future is mine1 天前
Excel如何只允许对部分表格内容进行修改
excel