composer install 卡在 bitbucket 认证是因为其不读取系统 git 凭据,需通过 composer config http-basic.bitbucket.org 显式配置个人访问令牌(pat)及邮箱,且 pat 必须含 repository:read 权限,认证信息存于项目级 auth.json 并被 .gitignore 排除。

为什么 composer install 会卡在 Bitbucket 认证环节
因为 Composer 默认用 SSH 或 HTTPS 克隆私有仓库,而 Bitbucket 对 HTTPS 私有库强制要求 OAuth 或个人访问令牌(PAT),没配好就报 403 Forbidden 或卡在 Cloning into '...'...。这不是网络问题,是认证链断了。
关键点:Composer 不读取系统 git 凭据管理器(如 git config --global credential.helper),它自己走 HTTP Basic Auth,必须显式提供令牌。
- Bitbucket Cloud(bitbucket.org)只接受 个人访问令牌(Personal Access Token),不是 App Password,也不是 OAuth consumer
- 令牌必须带
repository:read权限(如果是私有 repo) - 不能把令牌硬写进
composer.json的repositoriesURL 里——会被提交、泄露、且不支持动态刷新
用 composer config 设置项目级 Bitbucket HTTP 认证
最安全的做法是只对当前项目生效,不污染全局配置,也不暴露到版本控制中。
执行以下命令(替换 your-token-here 为实际令牌):
composer config http-basic.bitbucket.org your-email@example.com your-token-here
这会在项目根目录下生成或更新 auth.json 文件,内容类似:
{
"http-basic": {
"bitbucket.org": {
"username": "your-email@example.com",
"password": "your-token-here"
}
}
}
-
username字段填你 Bitbucket 账号绑定的邮箱(不是用户名),Bitbucket API 认证依赖这个 -
password字段填 PAT,不是密码;Bitbucket 把 PAT 当作密码处理 -
auth.json默认被.gitignore排除,确保不会误提交 - 如果项目用的是自托管 Bitbucket Server(非 bitbucket.org),把域名换成你的实例地址,比如
bitbucket.yourcompany.com
验证是否生效:运行 composer update 前先试连
别等 update 卡住才排查。用 Composer 自带的诊断命令快速验证:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer diagnose
它会检查 auth.json 是否可读、格式是否合法,但不会测试真实连接。更直接的方式是手动触发一次 HTTP 请求:
curl -u "your-email@example.com:your-token-here" https://api.bitbucket.org/2.0/user
返回 JSON 用户信息说明令牌有效;若返回 {"type": "error", "error": {...}},大概率是邮箱或令牌错了。
- Composer 在拉取私有包时,会把
http-basic配置自动转成Authorization: Basic ...请求头 - 如果仍失败,检查 Composer 版本:低于 2.2 的旧版对 Bitbucket 的 token 支持不稳定,建议升级到
^2.5 - Bitbucket 的 rate limit 很低(每小时 1000 次),频繁失败可能被临时封禁,换时间再试
多人协作时怎么避免每人重配?
不能靠文档口头约定,也不能让每个人改自己机器上的 auth.json。正确做法是提供模板 + 提示脚本:
在项目根目录放一个 auth.json.dist(提交进 Git):
{
"http-basic": {
"bitbucket.org": {
"username": "your-bitbucket-email@example.com",
"password": "your-personal-access-token"
}
}
}
再加个简短说明(如 README.md):
- 复制
auth.json.dist为auth.json - 登录 Bitbucket → Settings → App passwords → 创建新 token,勾选
repository:read - 把邮箱和 token 填进
auth.json对应字段 - 确保
auth.json在.gitignore中已声明
复杂点在于 Bitbucket 不支持按仓库粒度授权 token,一个 token 能读你所有私有 repo;所以团队里最好每人用自己的 token,而不是共享一个。










