为什么 .gitignore 不能排除文件?
问题
项目结构如下图:
.
├── 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,换言之,我们应该只忽略文件夹中的内容,而非忽略文件夹。
Links: 为什么-.gitignore-不能排除文件?