Git for Windows与GCM Core无法保存Bitbucket应用程序密码

6
在新机器上,我安装了Git for Windows 2.37.1.windows.1,它也安装了Git凭证管理器Core 2.0.785+6074e4e3d3。我创建了一个Bitbucket应用程序密码。然后我尝试使用git pull访问我的Bitbucket帐户上的私有存储库。
Git弹出了一个Bitbucket身份验证对话框。它有两个选项:通过浏览器进行身份验证或使用密码进行身份验证。我首先尝试了密码选项。我使用了我的Bitbucket用户名和新创建的应用程序密码。我能够访问存储库。
但是当我尝试相同的命令时,它再次弹出身份验证对话框。我一遍又一遍地重复这些步骤。每次都允许我访问存储库,但似乎未保存凭据。
我在Windows中打开了凭据管理器,并看到了git:https://bitbucket.org的凭据。
我尝试再次访问仓库,但这次我选择了使用浏览器进行身份验证的选项。它将我发送到某个网页,由于我已经在Bitbucket网站上登录,它显示我已经通过身份验证。我能够访问存储库。现在,我可以每次访问存储库时都无需进行身份验证对话框。

请注意,如果我创建GitHub个人访问令牌并在身份验证对话框中输入它,Git似乎会保存它,因此我不需要每次输入它。

为什么Bitbucket没有存储我的凭据?为什么它要求我通过浏览器进行身份验证?如果我被迫通过浏览器进行身份验证,那么拥有应用程序密码的意义是什么?这种特定情况的文档在哪里?

在使用Git for Windows中的“连接到Bitbucket”身份验证对话框中的两个选项之一进行浏览器身份验证后,我能够在Windows 10命令提示符上继续使用Git而无需进一步身份验证。但是,当我切换到PowerShell时,整个过程又再次发生:每次尝试执行git push等操作时,都会出现身份验证对话框。每次我都可以选择“密码”选项,并使用我的应用程序密码成功通过身份验证,但它从未保存密码,需要我每次重新输入密码。
因此,我再次选择了对话框中的“浏览器”选项;它将我带到一个Bitbucket网页,该网页显示(因为我已经登录):

身份验证成功 Git凭据管理器已成功验证。您现在可以关闭此页面。

现在,我可以使用“浏览器”进行身份验证,从PowerShell轻松地执行git push等操作。
因此,问题仍然存在:为什么Bitbucket针对Git for Windows的身份验证对话框使用已保存的应用程序密码,而不是要求我每次重新输入密码?(请注意,我已更新为Git for Windows 2.37.2.windows.2。)

你可能已经知道,但是以后可以参考一下:你总是可以考虑使用SSH而不是HTTPS。 - leun4m
3个回答

1

使用账户密码通过https进行git操作,账户密码存储在钥匙串中,而不是在应用程序中使用。

首先运行以下命令:

git config --system credential.helper

git config --global credential.helper

然后从终端进行推送。如果没有存储在钥匙串访问中,则应该会要求输入密码,请提供应用程序密码

这个答案已经被几个人尝试过了,请查看此链接:https://community.atlassian.com/t5/Bitbucket-questions/Always-seenig-a-mesage-Using-an-account-password-for-Git-over/qaq-p/1919111


这对我帮助很大! - undefined

0

在两台服务器上遇到完全相同的情况,我使用了以下命令来解决它

git config --global credential.bitbucketAuthModes "basic"

从这里链接

我不再需要重新输入密码,现在使用的是Windows凭据管理器中的密码。

然而,这仅解决了一个服务器的问题。所以肯定不是正确的解决方案,而只是部分解决方案。

我无法在第二个服务器上重现它。

编辑:我假设两台服务器都使用相同的配置,但是Git版本不同:

  • 工作服务器:Git版本为2.35.1。windows.2
  • 未工作的服务器:获取版本 2.38.1 。windows.1

注意:我在两个服务器上都使用代理,我想它可能是问题的源头。


-1

首先,请确保问题仍然存在于6天前发布的Git for Windows 2.37.2(2)(2022年8月12日)。

其次,请确保注册一个应用程序密码作为您的密码。
(应用程序密码是用于脚本任务和将工具(如CI/CD工具)与Bitbucket Cloud集成的基于用户的访问令牌)。
正如“Bitbucket Cloud帐户密码在2022年3月1日结束时用于Git over HTTPS和API的公告”所解释的那样:

如果您已经将您的凭据(即用户名和账户密码)保存在凭据管理器中,例如Git凭据管理器(GCM)、Windows凭据管理器、OS X钥匙串或其他第三方应用程序中,则需要在2022年3月1日之前使用应用程序密码更新它们,以便继续使用Bitbucket API和/或Git over HTTPS的基本身份验证而不会受到干扰。
这是如何在 Windows 上使用应用程序密码更新 GCM 的方法:
在CMD中,设置一个简化的路径,如下所示:
set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\
set "GH=%LOCALAPPDATA%\Programs\Git"
set "PATH=%GH%\bin;%GH%\cmd;%GH%\usr\bin;%GH%\mingw64\bin;%GH%\mingw64\libexec\git-core;%PATH%"

然后在相同的CMD中键入:

printf "Host=bitbucket.org\nprotocol=https" | git credential-manager-core get
# or 
printf "Host=bitbucket.org\nprotocol=https\nusername=YourBitBucketAccount" | git credential-manager-core get

如果您没有看到您的令牌(用于 BitBucket Cloud 的应用程序密码),请手动注册:

printf "Host=bitbucket.org\nprotocol=https\nusername=YourBitBucketAccount\npassword=YourAppPassword" | git credential-manager-core store

然后再试一次,即使不使用克隆,也可以使用 git ls-remote https://bitbucket.org/you/YourPrivateRepo 命令。
如果它列出了分支,则身份验证已成功。


你给出的答案是关于Bitbucket Server的HTTP访问令牌,而这个问题是关于Bitbucket云端应用密码的,它们是完全不同的东西。这个答案对我的情况没有帮助。 - Garret Wilson
@GarretWilson 我已经更新了BitBucket Cloud的答案。 - VonC
您更新的答案似乎过时了。它提到使用 git credential-manager get,但是Git已经从 credential-manager 切换到了 credential-manager-core。请查看 https://github.blog/2020-07-02-git-credential-manager-core-building-a-universal-authentication-experience/ 和 https://github.com/GitCredentialManager/git-credential-manager 。 - Garret Wilson
你可能正在使用一个旧版安装。请删除你的 credential.helper 值并重新安装 Git。参见 https://dev59.com/ZngPtIcB2Jgan1znY4Iz 。 - Garret Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接