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

相关推荐
阡陌..3 小时前
202605新版git_2.54.0常用操作指令
大数据·git·elasticsearch
会笑的小熊3 小时前
VScode项目推送到git仓库
ide·git·vscode
zhangfeng11333 小时前
宝塔服务器完全可以安装 Git,进行版本管理,而且非常简单
运维·服务器·人工智能·git·编程
Bdygsl5 小时前
Git(1)—— 基本理解与使用
git
JiaWen技术圈6 小时前
增量静态再生(ISR)详解:Next.js 中的实现与应用
javascript·git·ubuntu
z19408920668 小时前
在线题库整理:把重复劳动从 Excel 手工里解放出来
excel
The Chosen One9858 小时前
【Linux】深入理解Linux进程(二):进程的状态
linux·运维·服务器·开发语言·git
TimberWill8 小时前
git worktree实现分支管理
git
普修罗双战士9 小时前
项目设计-文章系统发布文章完整前后端设计
java·数据库·vue.js·spring boot·git·intellij-idea