每次推送时Git都会询问用户名

每当我尝试推送到我的仓库git都要求username & password

我每次重新输入密码都没有问题,但问题是输入用户名。我使用https克隆我的存储库。

那么,我如何配置git,使其不会在每个git push上要求username

我是Linux新手,但Windowsgit push中的IIRC只要求密码。

637344 次浏览

您可以在本地存储库的.git/config文件中完成此操作。此文件包含一个名为“远程”的部分,其中包含一个名为“url”的条目。“url”条目应包含您正在谈论的存储库的https链接。

当您在主机“url”前面加上您的用户名时,git不应该再询问您的用户名。这是一个例子:

url = https://username@repository-url.com

确保您使用的是SSH而不是超文本传输协议。选中这个 SO答案。

编辑(由@dk14根据版主和评论的建议)

警告:如果您在答案中使用credential.helper store,您的密码将完全未加密(“按原样”)存储在~/.git-credentials。请参阅下面的评论部分或“链接”部分的答案,特别是如果您的雇主对安全问题零容忍。

即使被接受,它也没有回答实际OP关于只省略用户名(而不是密码)的问题。对于有这个问题的读者,@grawity的回答可能会派上用场。


原答案(作者:@亚历山大·朱):

您可以使用以下命令存储凭据

$ git config credential.helper store$ git push http://example.com/repo.gitUsername: <type your username>Password: <type your password>

我建议你阅读
$ git help credentials

如果您使用https而不是ssh,您可以在.git/config如user701648所说中编辑“url”,但如果需要,您也可以添加密码:

url = https://username:password@repository-url.com

您可以通过在Git配置文件中放入以下内容来为给定站点的所有存储库设置用户名。您需要将“https://example.com”和“me”更改为实际URL和您的实际用户名。

[credential "https://example.com"]username = me

(这直接来自“git帮助凭据”)

使用Git存储库进行永久身份验证

运行以下命令以启用凭据缓存:

$ git config credential.helper store$ git push https://github.com/repo.git
Username for 'https://github.com': <USERNAME>Password for 'https://USERNAME@github.com': <PASSWORD>

使用还应指定缓存过期时间

git config --global credential.helper "cache --timeout 7200"

启用凭据缓存后,它将被缓存为7200秒(2小时)


读取凭据文档

$ git help credentials

我找到的最简单的方法是使用这个命令:

git config --global credential.https://github.com.username <your_username>

这可以逐个站点工作并修改您的全局git配置。

要查看更改,请使用:

git config --global --edit

添加新的SSH键,如这篇文章在github所述。

如果Git仍然要求您输入用户名和密码,请尝试将远程URL中的https://github.com/更改为git@github.com:

$ git config remote.origin.urlhttps://github.com/dir/repo.git
$ git config remote.origin.url "git@github.com:dir/repo.git"

如果您使用SSH版本,您将不会有任何密码问题。只有一次您生成SSH密钥,告诉git,这个 PC将与这个 github帐户一起使用,并且再也不会问我任何访问权限(对于这台PC)。

如何为Github生成SSH

  1. git config credential.helper store

  2. git push/push https://github.com/xxx.git

  3. 然后输入您的用户名和密码。

  4. 完成

除了user701648的回答之外,您还可以使用以下命令将凭据存储在主文件夹(所有项目的全局)中,而不是项目文件夹中

$ git config --global credential.helper store$ git push http://example.com/repo.gitUsername: <type your username>Password: <type your password>

为了避免输入用户名,但仍会提示输入密码,那么您可以简单地克隆您的存储库,包括用户名:

git clone user_name@example.gitrepo.com/my_repo.git

更改克隆的repo工作原理:

git remote set-url origin git@github.com:gitusername/projectname.git

使用缓存的凭据可以工作,设置超时时间会让事情变得不那么烦人。如果您使用Windows凭据助手,这应该是最简单的方法(尤其是在SSH被阻止的情况下)。

当我只git拉,git拉起源xxx,git要求用户名和密码。

git config credential.helper store

它奏效了。

最简单的方法是创建一个包含以下内容的~/.netrc文件:

machine github.comlogin YOUR_GITHUB_USERNAMEpassword YOUR_GITHUB_PASSWORD

(如图所示:https://gist.github.com/ahoward/2885020

您甚至可以关闭此文件的权限,以便没有人可以通过键入以下命令读取您的密码:

chmod 600 ~/.netrc

你可以跑了

git config --global credential.helper wincred

在您的系统中安装并登录到Windows的GIT之后。

git config --global credential.helper cache

快速方法

在工作目录中获取您的git的url:

git config remote.origin.url

然后:

git config credential.helper store
git push "url of your git"

会问用户名和密码最后一次

完成。

ssh+key authenticationhttps+credential.helper更可靠

您可以配置为对所有存储库使用SSH而不是HTTPS,如下所示:

git config --global url.ssh://git@github.com/.insteadOf https://github.com/

url.<base>.insteadOf被记录为这里

(仅适用于mac OS)

对于windowsLinux,请参阅下面提到的Github的留档链接。

来自Github文档:文档链接

在Git中缓存您的GitHub密码

  • 您需要Git 1.7.10或更高版本才能使用osxkeychain凭据助手。

    检查您的Git版本:git --version

  • 找出osxkeychain助手已安装:

    git credential-osxkeychain

    如果你得到以下响应,那么你已经安装并准备好在你的mac上使用它:

    > Usage: git credential-osxkeychain <get|store|erase>

    如果您没有收到如上所示的响应,那么您可以运行以下命令安装它:

    git credential-osxkeychain

  • 告诉git全局使用osxkeychain获取git凭据:

    git config --global credential.helper osxkeychain

    在将凭据保存到钥匙扣之前,它会提示一次。

对我来说,当我为我的帐户启用2因素身份验证(2FA)时出现此问题。我会输入正确的凭据,身份验证仍然会失败,因为当然终端身份验证不要求身份验证代码。

我只需要为我的帐户禁用2FA。这样做后,我必须在git push期间输入我的凭据一次。从那时起就不需要它们了。

当一个人使用HTTPS而不是SSH下载时,就会发生这种情况,我实现的简单方法是我推送所有内容,因为我做了一些更改,一旦它要求用户名和密码,然后我从我的机器中删除目录并git克隆SSH地址。它解决了。

只需使用SSH而不是HTTP克隆它,它不会要求用户名或密码。

即使您使用SSH下载,双重验证也会产生问题,因此禁用它可以解决问题。

设置全天(即24小时)的凭据。

git config --global credential.helper 'cache --timeout=86400'

否则1小时将86400秒替换为3600秒。

“缓存”身份验证助手的所有配置选项:

git help credential-cache

更多信息:https://docs.github.com/en/get-started/getting-started-with-git/caching-your-github-credentials-in-git

我用来将我的Git存储库用户名和密码存储在磁盘上。所以当我推送代码时,git不会每次都询问用户名和密码

按照这些命令将凭据保存在本地存储中

$ git config credential.helper storeor$ git config --global credential.helper store

从现在开始,当第一次访问时,Git会将凭据写入每个URL上下文的~/. git-凭据文件。要查看此文件的内容,您可以使用cat命令,如图所示。

$ cat  ~/.git-credentials

注意,从2021年8月13日开始,GitHub在验证Git操作时将不再接受帐户密码,并将要求对GitHub.com.上所有经过身份验证的Git操作使用基于令牌的身份验证。

因此,对于您必须使用的给定身份验证上下文的用户名的静态配置(使用github时):

https://username:<personal-access-tokens>@repository-url.com

请注意,我们使用的是<personal-access-tokens>而不是<password>

有关如何创建个人访问令牌的更多详细信息,请查看留档

github留档说:

GitHub over HTTPS…每次使用Git进行身份验证时GitHub,系统将提示您输入凭据进行身份验证使用GitHub,除非您使用凭证助手缓存它们。

使用SSH…每次你使用Git在GitHub上进行身份验证时,系统将提示您输入SSH密钥密码,除非存储了密钥.

GitHub建议通过HTTPS连接。可能是因为它们希望您使用 Git Credential Manager Core。但是Git Credential Manager Core在Windows和macOS上运行。Linux支持(直到发布时)在早期预览中。

因此,我将只提供Git和SSH解决方案。

Git的留档讨论了如何避免使用git凭据反复输入相同的凭据。

解决方案1

使用凭据助手缓存密码(在内存中短时间)。

git config --global credential.helper cache

解决方案2

使用凭据助手存储密码(无限期地存储在磁盘上)。

git config --global credential.helper 'store --file ~/.my-credentials'

您可以在留档中找到凭证的保存位置(如果没有使用--file显式设置)。

注意:要解决关注的问题,即git凭据存储的凭据完全未加密(“按原样”),您可以随时加密文件并在使用前对其进行解密。

解决方案3

这几乎是从生成新的SSH密钥并将其添加到ssh代理直接复制粘贴。我认为遵循链接比从这里阅读更好。无论如何,我将在这里复制粘贴命令。

  1. 使用ssh-keygen -t ed25519 -C "your_email@example.com"创建ssh密钥。您也可以使用RSA而不是使用ssh-keygen -t rsa -b 4096 -C "your_email@example.com"的Ed25519

  2. 将SSH密钥添加到您在GitHub上的帐户

  3. 如果未启动,请使用$ eval "$(ssh-agent -s)"在后台启动ssh-agent

  4. 使用$ ssh-add ~/.ssh/id_ed25519将SSH私钥添加到ssh代理。如果您使用不同的名称创建了密钥,或者如果您要添加具有不同名称的现有密钥,请将命令中的id_ed25519替换为私钥文件的名称。

我今天遇到了这个问题。如果您在2020年11月面临此问题,那么您需要更新您的git版本。我收到了一封告诉我这件事的电子邮件。以下是github团队的电子邮件。

我们检测到您最近试图向GitHub进行身份验证使用旧版本的Git for Windows。GitHub改变了如何用户在使用Git for Windows时进行身份验证,现在需要使用Web浏览器对GitHub进行身份验证。为了能够登录通过Web浏览器,用户需要更新到最新版本的GitWindows。您可以在以下位置下载最新版本:

如果您无法将Git for Windows更新到最新版本,请参阅有关更多信息和建议的解决方法的以下链接:

如果您对这些更改有任何疑问或需要任何协助,请联系GitHub支持,我们很乐意#36825;助

感谢GitHub团队

正确的解决方法是将http更改为ssh

您可以使用此git remote rm origin删除远程存储库。

然后您可以使用ssh sintax再次添加它(您可以从github复制):git remote add origin git@github.com:username/reponame.git.

看看这篇文章。https://www.freecodecamp.org/news/how-to-fix-git-always-asking-for-user-credentials/

我尝试了这些步骤,它奏效了:

  1. 创建个性化访问令牌:https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token

  2. 将令牌添加到Android工作室(文件->设置->版本控制->Github->添加-使用令牌登录)

  3. 转到文件->设置->版本控制->Git并取消选中使用凭证助手

  1. 打开Windows凭据管理器并从通用凭据中删除git:https://dev.azure.com/orgname。有关步骤,请查看为什么带有GIT的TFS不能从命令行工作?
  2. 从文件夹C:\Users\{username}中删除.git-credentials文件。
  3. 确保从https://git-scm.com/download/win更新git最新版本

使用下面的命令可以给你15分钟的超时时间。

$ git config --global credential.helper cache

您也可以通过下面的命令修改时间。这是1小时的示例。

$ git config --global credential.helper 'cache --timeout=3600'

如果您想在本地缓存,请使用命令一小时超时。

$ git config credential.helper 'cache --timeout=3600'

自2021年8月13日起,不再接受基于密码的登录。您现在需要使用基于令牌/SSH的身份验证。

如果你不想每次推送时都被问到,安装GitHubCLI,然后缓存您的凭据:

git config --global credential.helper storegh auth login

并按照提示进行操作。但要确保将Authenticate Git with your GitHub credentials?Y对齐。