使用Laravel Shift升级至6.x后,推送提交因缺失LFS对象失败
解决Git LFS提示文件缺失但实际存在的问题(Laravel升级场景)
问题场景
使用Laravel Shift将Laravel 5.8项目升级至6.x版本,按Shift分支的变更日志完成所有修改后,提交并推送代码时遇到Git LFS错误,提示以下文件缺失:
(missing) vendor/srmklive/paypal/tests/Mocks/samples/sample.pdf
(missing) vendor/srmklive/paypal/tests/Mocks/samples/sample2.pdf
实际检查文件路径后,确认这两个文件存在,未丢失或隐藏。尝试执行git config lfs.allowincompletepush true后,问题仍未解决。
解决方案
1. 重新确认并修复LFS追踪规则
先检查这些PDF文件是否被Git LFS正确追踪,执行以下命令重新设置追踪规则:
git lfs track "vendor/srmklive/paypal/tests/Mocks/samples/*.pdf"
然后提交.gitattributes文件的变更:
git add .gitattributes git commit -m "Fix LFS tracking for PayPal sample PDFs"
2. 重置本地LFS对象缓存
可能本地的LFS对象缓存出现异常,执行以下命令重新拉取并校验对象:
git lfs fetch --all git lfs checkout vendor/srmklive/paypal/tests/Mocks/samples/sample.pdf git lfs checkout vendor/srmklive/paypal/tests/Mocks/samples/sample2.pdf
3. 排除vendor目录的Git追踪(推荐最佳实践)
vendor目录是Composer管理的依赖目录,不应该被Git(包括LFS)追踪,因为依赖可以通过composer install重新安装。按以下步骤操作:
- 打开项目根目录的
.gitignore文件,确保存在以下规则:vendor/ - 移除已被Git追踪的vendor目录文件:
此操作从Git索引中移除vendor目录,但不会删除本地文件,后续推送时就不会再出现依赖目录的LFS问题。git rm -r --cached vendor/ git commit -m "Stop tracking vendor directory (follow Laravel best practice)"
4. 强制推送LFS对象
如果以上步骤无效,尝试强制推送所有LFS对象到远程仓库:
git lfs push --all origin <你的分支名称>
完成后再推送代码:
git push origin <你的分支名称>
内容的提问来源于stack exchange,提问作者Anit Sankar
相关产品推荐
相关产品推荐

