这Git用着用着又踩坑了,尝试push --force给remote的时候发现一直挂起在上面,试着google了一下得到了一个高票回答:
git config --global core.askpass "git-gui--askpass"
说是这样会有一个gui界面来提示你输入用户密码,结果并没有用。
又有人说和ssh-agent相关,重启即可,不过我是账号密码登录没有配key,估计希望不大,试着杀掉原有的进程后重新启动,无效。
因为平常一直是用github desktop来给github上的repo做管理的,一直都是可以用的,只是它不支持force push所以需要自己去命令行敲,尝试手动git push后发现同样会挂起,说明和 force flag无关。
尝试去看它的log,发现它在push时额外覆盖了两个configuration:
git -c credential.helper= -c protocol.version=2 push origin main:main --progress
尝试自己在push --force时同样覆盖这两个参数,发现弹出了登录窗口提示输入,输入后成功push。不过尚不清楚两个参数哪个其效果了还是同时其效果才行。
继续研究发现有人提到说他重新安装了git-crendential-manager-core(简称gcm)后就修复了这个问题,尝试在github上下载gcm后再次尝试push,弹出一个不同的窗口要求输入token或登录,登录后成功push。
通过git config --list后发现安装后额外新增了一条credentials.helper:
credential.helper=C:/Program\ Files\ \(x86\)/Git\ Credential\ Manager\ Core/git-credential-manager-core
所以问题其实出在git安装的时候没有配置正确的credential.helper,导致git一直挂起在等待credential.helper的回复,初始的配置是:
credential.helper=manager-core
而github desktop为什么可以是因为他取消了指定的credential.helper,git应该自己坐了一次降级后调用了默认的credential.helper,这也可以解释为什么安装gcm后和通过命令覆盖参数是得到了两种不同的登录窗口。
其实我在~\mingw64\libexec\git-core目录下是有看到一个版本较老的gcm,怀疑是版本问题?