如何排除指定目录与文件 避免其被推送到Git远程仓库
Git 永久排除指定文件/文件夹不推送远程仓库的操作方法
问题根源
.gitignore 和 .git/info/exclude 仅对从未被Git纳入版本跟踪的文件生效。
你配置后不生效,是因为要排除的目标路径(比如e2e文件夹)之前已经被提交到Git仓库、处于被跟踪状态;而node_modules能正常被忽略,是因为它从项目初始化开始就没被提交过,始终是未跟踪状态。
操作步骤
- 第一步:将目标路径从Git跟踪缓存中移除(不会删除本地实际文件)
排除整个文件夹时执行递归移除命令,以e2e目录为例:
如果要排除单个文件,去掉git rm -r --cached e2e/-r参数即可:git rm --cached 你的文件相对路径 - 第二步:配置忽略规则
根据需求二选一即可:- 规则需要对所有仓库协作者生效:将目标路径写入项目根目录的
.gitignore文件,例如新增一行e2e/(路径末尾加斜杠代表匹配整个目录) - 规则仅在你本地生效、不需要同步给其他人:将目标路径写入本地仓库的
.git/info/exclude文件,语法和.gitignore完全一致
配置完成后可以执行校验命令确认规则命中:
命令会输出命中的忽略规则位置和内容,方便排查路径写错、规则不生效的问题。git check-ignore -v e2e/ - 规则需要对所有仓库协作者生效:将目标路径写入项目根目录的
- 第三步:提交本地变更
提交完成后,Git就不会再跟踪目标路径下的任何变更,效果和本地node_modules目录完全一致。git commit -m "chore: stop tracking e2e directory" - 第四步:推送到远程仓库
推送完成后,远程仓库中的对应目标路径会被删除,后续你在本地对该路径的所有修改都不会被提交、推送到远程。git push
注意事项
其他协作者拉取这次提交时,如果他们本地的目标路径处于Git跟踪状态,拉取后本地对应文件会被删除。如果需要保留本地文件,协作者需要提前备份,或者先在本地执行同样的
git rm -r --cached 目标路径命令后再拉取更新。
内容的提问来源于stack exchange,提问作者Kyle Vassella
相关产品推荐
相关产品推荐

