git pull操作是否会删除gitignore配置忽略的本地目录与文件?
场景说明
- 项目为本地开发的Laravel 7站点,代码托管在GitHub仓库,常规部署流程为:本地完成功能修改后推送到远程仓库,通过SSH登录部署站点的VPS执行
git pull拉取最新代码完成上线 - 此前排查发现部分原本在
.gitignore中配置的目录未被Git正常忽略,因此通过清除Git索引缓存的方式调整提交规则,依次执行git rm -rf --cached .、git add .、git commit -am "cleaning git cache"、git push完成规则调整,提交后对应目录的忽略规则正常生效 - 调整时注意到
.gitignore中配置了/storage、/storage/*/*的忽略规则,因此产生核心顾虑:VPS上的storage目录存储了大量不可丢失的有效业务文件,此时执行git pull会不会直接删除该目录下的文件?当时查阅的相关解答存在矛盾,无法消除顾虑 - 为规避风险最终执行回滚操作恢复原有部署状态:本地依次执行
git reset HEAD~1、git add .、git commit -m "Today's commit"、git push -f origin master,再在VPS执行git pull后环境恢复正常
核心疑问的判定逻辑
关于“执行清理Git缓存的提交后,VPS上pull会不会删除本地storage的有效文件”,可按照Git的实际运行规则拆解为两个明确场景,不存在模糊空间:
git rm --cached操作的核心作用,仅为将指定文件从Git的跟踪索引中移除,不会删除任何本地工作区的实际文件。这类操作生成的提交,在Git的变更记录中只会标记“对应文件不再属于仓库跟踪范围”,不会主动对工作区里未被跟踪的本地文件做任何修改- 如果线上VPS的storage目录下的文件,在你调整忽略规则之前的旧提交中就已经被Git跟踪,那么拉取“移除这些文件跟踪关系”的提交时,Git会按照同步规则把这些原本被跟踪的文件从工作区删除,之后再因为新的忽略规则不再对它们做跟踪;但如果线上storage从项目部署开始就从未被提交到Git仓库(符合Laravel官方的目录配置约定,也就是线上storage全是本地生成的业务文件、从未进入Git索引),那么拉取这类忽略规则调整的提交时,Git完全不会触碰storage目录下的任何实体文件,自然不存在丢失风险
回滚操作的实际影响
- 你在本地执行的
git reset HEAD~1,本质是把本地仓库的HEAD指针回退到了“未执行Git缓存清理、提交忽略规则调整”的提交节点 - 后续重新提交当日有效业务代码、
git push -f origin master强制推送的操作,是把远程仓库master分支上那个“清理Git缓存、移除storage跟踪关系”的提交从分支历史中移除 - 这种状态下VPS执行pull操作时,拉取的提交历史里根本不存在针对storage目录的删除/移除跟踪记录,因此不会触发任何目录修改动作,站点环境自然恢复到正常运行状态
内容的提问来源于stack exchange,提问作者marco987
相关产品推荐
相关产品推荐

