Composer install 报“Package is not a git repository”是因为 repositories 中配置了 "type": "path" 但对应目录未初始化 Git,或误用 "type": "vcs" 指向本地路径;需确保 path 类型目录已 git init,或 vcs 类型 url 为有效远程 Git 地址。

为什么 composer install 会报 “Package is not a git repository”?
这个错误通常出现在你用 composer.json 声明了某个包的 VCS 类型(如 "type": "vcs"),但 Composer 尝试从本地路径或未初始化 Git 的目录拉取时,发现目标目录根本不是 Git 仓库。常见于:path 类型仓库指向了一个没执行过 git init 的文件夹,或该目录下缺失 .git 子目录。
检查并修复本地 path 仓库的 Git 状态
如果你在 repositories 中配置了 "type": "path",务必确认对应路径是有效的 Git 仓库:
- 进入该路径,运行
git status—— 若提示fatal: not a git repository,说明它没被 Git 管理 - 若确认是源码目录,直接初始化:
git init && git add . && git commit -m "init" - 如果只是想临时测试且不关心版本控制,改用
"type": "package"+"dist"手动指定 ZIP 或 TAR 包,绕过 Git 检查
repositories 配置中误用 vcs 类型指向本地路径
这是最典型的配置错误:把本地文件系统路径当成远程 VCS 地址来用。VCS 类型("type": "vcs")只适用于真实可 clone 的 Git/Svn/Hg 地址(如 https://github.com/user/repo.git),不能填 ./my-local-package 这类相对路径。
正确做法分两种:
- 本地开发调试 → 改成
"type": "path",并确保该路径已是 Git 仓库(见上一条) - 想引用远程私有 Git 库 → 用
"type": "vcs",且"url"必须是完整克隆地址,例如:{ "type": "vcs", "url": "https://gitlab.example.com/team/internal-lib.git" }
Composer 2.2+ 对非 Git VCS 的兼容性变化
新版 Composer 默认只信任 Git 仓库,对 Subversion、Mercurial 等支持已弱化甚至移除。如果你的 repositories 里写了 "type": "vcs" 但 "url" 指向的是 SVN 地址,会直接失败,不再尝试降级处理。
- 确认
url协议和后缀:Git 必须是https://...或git@...,且推荐以.git结尾 - 避免混用:不要在同一个
repositories数组里同时写path和vcs类型却共享同一物理路径 - 调试时加
-vvv查看 Composer 实际尝试访问的路径:composer install -vvv 2>&1 | grep -A5 "Cloning"
repositories 类型的匹配关系,比版本号或网络权限更容易被忽略。一个没 .git 的 path 目录,哪怕内容完全正确,也会卡在这一步。










