关于linux:每次推送时Git都要求输入用户名

Git asks for username every time I push

每当我试图推进我的回购时,我都会要求两个username & password

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

所以,我如何配置Git,使它不会在每个git push上要求username

我对Linux不熟悉,但在Windowsgit push中IIRC只要求输入密码。


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

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

即使接受了,它也不能回答实际操作中关于只省略用户名(而不是密码)的问题。对于那些有这个确切问题的读者来说,@grawity的答案可能很有用。

原始答案(作者:@Alexander Zhu):

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

1
2
3
4
$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

我也建议你读江户十一〔四〕号


您可以在本地存储库的.git/config文件中完成此操作。此文件包含一个名为"remote"的节,其中包含一个名为"url"的条目。"url"条目应该包含您所说的知识库的https链接。

当您在主机"url"前面加上您的用户名时,git不应该再要求您的用户名了。下面是一个例子:

1
url = https://[email protected]


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

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

1
2
3
4
5
$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>

使用还应指定缓存过期

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

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

读取凭据文档

1
$ git help credentials


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

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

这是一个网站一个网站的基础上工作,并修改您的全球Git配置。

要查看更改,请使用:

1
git config --global --edit


如本文在GitHub上所述,添加新的ssh密钥。

如果Git仍要求您输入用户名和密码,请尝试在远程URL中将https://github.com/更改为[email protected]:

1
2
3
4
$ git config remote.origin.url
https://github.com/dir/repo.git

$ git config remote.origin.url"[email protected]:dir/repo.git"


如果您使用的是https而不是ssh,则可以按照用户701648的说明在.git/config中编辑"url",但如果您需要,还可以添加密码:

1
url = https://username:[email protected]


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

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

(这直接来自"Git帮助凭据")。


确保您使用的是ssh而不是http。检查这个答案。


更改克隆的repo工作:

1
git remote set-url origin [email protected]:gitusername/projectname.git

使用缓存的凭据是可行的,设置超时时间可以减少麻烦。如果使用Windows凭据帮助器,那么这应该是最简单的方法(尤其是在ssh被阻止的情况下)。


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

1
2
3
4
$ git config --global credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>


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

1
2
3
machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_GITHUB_PASSWORD

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

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

1
chmod 600 ~/.netrc


当我只有git pull,git pull origin xxx时,git会同时请求用户名和密码。

1
git config credential.helper store

它起作用了。


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

如何为github生成ssh


git config—全局credential.helper缓存


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

1
git clone [email protected]/my_repo.git


  • $git config credential.helper存储

  • $git推送/推送https://github.com/xxx.git

  • 然后输入用户名和密码。

  • 多恩

  • 快速法

    在Working dir中获取Git的URL:

    1
    git config remote.origin.url

    然后:

    1
    2
    3
    git config credential.helper store

    git push"url of your git"

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

    完成。


    你可以跑了

    1
    git config --global credential.helper wincred

    在系统中安装并登录Git for Windows之后。