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

相关推荐
长成一棵参天树2 小时前
React15 vs React16 核心区别
git·vscode
驭渊的小故事6 小时前
Git 基础操作与对象观察
git
Hvitur7 小时前
Gitea 版本控制服务端【Red Hat 离线安装】
git
cspttty8 小时前
2027采购岗求职:大数据管理与应用专业如何把Excel、SQL变成业务能力
excel
flytalei8 小时前
逐浪笔记 GitOps 实战:Jenkins 构建、Argo CD 同步与 Git 回滚
笔记·git·jenkins
熊出没10 小时前
CommitLoom 使用教程:在 IntelliJ IDEA 中自动生成 Git 提交信息
java·git·intellij-idea
ms365copilot10 小时前
Excel Copilot 一键定位修改的内容
excel·copilot
IOT那些事儿1 天前
Git报错:Could not get HEAD hash
git·hash·head
杜哥无敌1 天前
Git Bash + acme.sh 实现 SSL 证书自动续签(完整指南)
git·bash·ssl
nunumaymax1 天前
Git教程
git