Windows环境下Git自定义GIT_ASKPASS脚本认证失败,用户名解析异常求助
Windows环境下Git自定义GIT_ASKPASS脚本认证失败,用户名解析异常求助
嗨,我仔细看了你的问题和调试日志,一下子就找到问题根源啦——你对GIT_ASKPASS脚本的工作机制理解错了,这不是Git的bug哦😉
问题出在哪里?
你写的token.bat一次输出了username=USER和password=xxx两行内容,但Git的GIT_ASKPASS机制是分两次调用脚本的:
- 第一次调用脚本时,Git会传递一个提示参数(比如
Username for 'https://github.com':),要求脚本输出纯用户名(不能带username=前缀); - 第二次调用脚本时,Git会传递另一个提示参数(比如
Password for 'https://USER@github.com':),要求脚本输出纯密码/令牌(同样不能带password=前缀)。
你的调试日志里明确显示了问题:Server auth using Basic with user 'username=USER'——Git把你脚本输出的整行username=USER当成了用户名,自然会认证失败。
修正后的脚本写法
把你的token.bat改成根据Git的提示输出对应内容的版本,示例如下:
@echo off :: 判断Git传递的提示信息,输出对应的凭据 if "%~1" == "Username for 'https://github.com':" ( echo USER ) else if "%~1" == "Password for 'https://USER@github.com':" ( echo ghp_<rest of the token> )
额外注意事项
- 确保输出内容没有多余的空格或换行:
echo USER后面不要加空格,否则空格会被当作用户名的一部分; - 如果你的仓库地址有自定义路径,要对应调整提示信息的判断逻辑;
- 测试前可以先清空之前的环境变量缓存,重新设置
GIT_ASKPASS=%~dp0\token.bat再执行Git操作。
这样修改后,Git就能正确解析用户名和令牌,认证应该就正常啦!




