如何避免在src子文件夹的.gitignore中重复配置!.gitignore?
问题:子文件夹的.gitignore被自身忽略,根目录规则不生效
目录结构
src/下的每个子文件夹都包含.gitignore文件,目录结构如下:
. ├── chartbrew │ ├── compose.yaml │ ├── .env │ ├── .gitignore │ └── README.md ├── directus │ ├── compose.yaml │ ├── .env │ ├── extensions │ ├── .gitignore │ ├── README.md │ └── uploads ├── lcmp │ ├── compose.yaml │ ├── .env │ ├── .gitignore │ ├── public │ └── README.md ├── metabase │ ├── compose.yaml │ ├── .env │ ├── .gitignore │ └── README.md └── uptime-kuma ├── compose.yaml ├── .env ├── .gitignore └── README.md
子文件夹的.gitignore内容
每个子文件夹的.gitignore至少包含以下内容(可能略有差异):
* !compose.yaml !README.md
遇到的问题
目前整体运行正常,但每个子文件夹的.gitignore文件会被自身的规则忽略。尝试在根目录添加.gitignore文件,写入!src/*/.gitignore,但规则未生效。不想逐个在子文件夹的.gitignore中添加!.gitignore进行重复操作。
解决方案
根目录.gitignore正确写法
编辑根目录的.gitignore,替换为以下内容:
# 确保src目录及子文件夹不被忽略(Git需遍历到子目录才能应用否定规则) !src/ !src/*/ # 允许提交所有子文件夹中的.gitignore !src/**/.gitignore
强制重新识别已忽略文件
如果之前子文件夹的.gitignore已被标记为忽略,执行以下命令让Git重新追踪这些文件:
git add src/*/.gitignore --force
原理说明
子文件夹内的.gitignore用*匹配了所有文件(包括自身),而Git的规则是子目录的.gitignore优先级高于根目录,直接写!src/*/.gitignore无法覆盖子目录的忽略规则。先确保子文件夹本身不被忽略,Git才能遍历进去应用根目录的否定规则,从而让子文件夹的.gitignore被正常提交。
内容的提问来源于stack exchange,提问作者gremo
相关产品推荐
相关产品推荐

