每当我尝试推入我的存储库时,git都会要求用户名和密码。

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

那么,我如何配置git,使它在每次git推送时都不需要用户名。

我是linux新手,但windows git push中的IIRC只要求输入密码。


当前回答

更改克隆的存储库可以:

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

使用缓存的凭据是有效的,设置超时时间可以减少麻烦。如果您使用Windows凭据助手,这应该是最简单的方法(特别是在SSH被阻止的情况下)。

其他回答

请注意,从2021 8月13日开始,github在对Git操作进行身份验证时不再接受帐户密码,并且将要求对github.com上所有经过身份验证的Git操作使用基于令牌的身份验证。您也可以继续使用SSH密钥。

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

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

请注意,我们使用的是<个人访问令牌>,而不是<密码>

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

github文档称:

HTTPS上的GitHub。。。每次使用Git进行身份验证时GitHub,将提示您输入凭据以进行身份验证使用GitHub,除非您使用凭据助手缓存它们。...使用SSH。。。每次使用Git向GitHub进行身份验证时,除非您已经存储密钥。

github建议通过HTTPS进行连接。可能是因为他们希望您使用Git凭据管理器核心。但是Git凭据管理器核心在Windows和macOS上运行。Linux支持(截至发布时)在早期预览中。

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

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

解决方案1

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

git config --global credential.helper cache

解决方案2

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

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

您可以在文档中找到凭据将保存的位置(如果未使用--file显式设置)。

注:为了解决gitcredentials完全未加密(“原样”)存储凭据的问题,您可以在使用之前始终对文件进行加密和解密。

解决方案3

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

使用ssh keygen-t ed25519-C创建ssh密钥“your_email@example.com“.您也可以使用ssh keygen-t RSA-b 4096-C使用RSA代替Ed25519”your_email@example.com"将SSH密钥添加到GitHub上的帐户。如果未启动,请在后台使用$eval“$(ssh代理-s)”启动ssh代理使用$SSH-Add~/.SSH/id_ed25519将SSH私钥添加到SSH代理。如果您使用不同的名称创建了密钥,或者正在添加具有不同名称的现有密钥,请将命令中的id_ed25519替换为私钥文件的名称。

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

当您在主机“url”前面加上用户名时,git不应该再要求您输入用户名。下面是一个示例:

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

使用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

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

machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_GITHUB_PASSWORD

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

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

chmod 600 ~/.netrc

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

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