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