为什么 .gitignore 不能排除文件?

Tag: Q&A  Posted on 2020-04-12 21:30:09 Edited on 2020-04-12 21:30:49

问题

项目结构如下图:

.
├── CMakeLists.txt
├── README.md
├── build
│   ├── CMakeCache.txt
│   ├── Makefile
│   ├── cmake_install.cmake
│   ├── compile_commands.json
│   ├── libmain.a
│   ├── parser.exe
│   └── test.js
├── driver
├── include
└── src

.gitignore 如下:

.vscode
.vs
/build
!/build/*.js

我们想要忽略掉 build 文件夹中的内容,除了其中的 JavaScript 文件,但是为什么上述 .gitgnore 文件没办法做到这一点?

答案

正确的 .gitgnore 如下:

.vscode
.vs
/build/*
!/build/*.js

问题在于 /build/ 规则将 build 文件夹忽略掉了,导致 git 不会再进到该文件夹内检查文件是否应该 ignore,换言之,我们应该只忽略文件夹中的内容,而非忽略文件夹。