我从我的GitHub帐户克隆了一个Git存储库到我的电脑。
我想使用我的电脑和笔记本电脑,但只有一个GitHub帐户。
当我尝试使用我的电脑推送到GitHub或从GitHub中拉取时,它需要用户名和密码,但当我使用笔记本电脑时不需要!
我不想每次与origin交互时都键入用户名和密码。我在这里缺少什么?
我从我的GitHub帐户克隆了一个Git存储库到我的电脑。
我想使用我的电脑和笔记本电脑,但只有一个GitHub帐户。
当我尝试使用我的电脑推送到GitHub或从GitHub中拉取时,它需要用户名和密码,但当我使用笔记本电脑时不需要!
我不想每次与origin交互时都键入用户名和密码。我在这里缺少什么?
当前回答
对于Mac OS
转到您的Github设置->开发者设置->Github中的个人访问令牌页面(https://github.com/settings/tokens/new),并生成具有所有Repo权限的新令牌在mac上搜索Keychain Access->搜索github.com->单击Show password,然后粘贴刚才复制的令牌。转到CLI,它将再次询问用户名和密码,输入您的Github用户名并将令牌粘贴为密码,您应该可以继续使用CLI。
其他回答
对于Windows Git用户,在运行Git-config--globalcredential.helper store后,如果仍然提示输入密码,最好使用以下命令检查配置文件的写入位置
git config --list --show-origin
在我的例子中,在手动编辑配置文件“C:\Program Files\Git\mingw64\etc\gitconfig”并添加以下文本后,它就工作了。
[credential]
helper = store
我也有同样的问题。
所以我从项目中更改了.git/config文件,
url = https://github.com/<your-user-here>/<your-repo-here>
to
url = git@github.com:<your-user-here>/<your-repo-here>
并将SSH公钥添加到正在设置的Git配置文件中。
对于SSH公钥:
cat ~/.ssh/id_rsa.pub
对于那些对前面的答案感到困惑的新手,你可以这样做:
git remote -v
它会做出如下反应
origin https://yourname@github.com/yourname/yourrepo.git (fetch)
origin https://yourname@github.com/yourname/yourrepo.git (push)
然后,您可以运行许多其他人建议的命令,但现在您可以从上面知道您的名字和您的repo,因此您可以将上面的name/yourrepo.git剪切并粘贴到:
git remote set-url origin git@github.com:yourname/yourrepo.git
当您使用https进行Git推送时,只需为项目配置remote.origin.url,以避免每次推送时输入用户名(或/和密码)。
如何配置remote.origin.url:
URL format: https://{username:password@}github.com/{owner}/{repo} Parameters in URL: * username
Optional, the username to use when needed.
authentication, if specified, no need to enter username again when need authentication. Don't use email; use your username that has no "@", otherwise the URL can't be parsed correctly, * password optional, the password to use when need authentication. If specified, there isn't any need to enter the password again when needing authentication. Tip: this value is stored as plain text, so for security concerns, don't specify this parameter, * e.g git config remote.origin.url https://eric@github.com/eric/myproject
@更新-使用ssh
我认为使用ssh协议是比https更好的解决方案,尽管设置步骤稍微复杂一些。
粗略步骤:
使用命令创建ssh密钥,例如Linux上的ssh keygen,windows上的msysgit提供类似的命令。将私钥保存在本地计算机上的适当位置,例如~/.ssh。然后通过ssh-add命令将其添加到ssh代理。将公钥上传到Git服务器。将Git存储库的remote.origin.url更改为ssh样式,例如。,git@gitlab.com:myaccount/myrepo.git然后,当拉或推时,永远不需要输入用户名或密码。
提示:
如果您的ssh密钥有密码短语,则默认情况下,您需要在每次重新启动计算机后首次使用密钥时输入密码。
@更新-在https和ssh协议之间切换。
只需更改remote.origin.url就足够了,或者您可以直接编辑repo_home/.git/config来更改值(例如在Linux上使用vi)。
通常我为每个协议添加一行,并使用#注释掉其中一行。
E.g.
[remote "origin"] url = git@gitlab.com:myaccount/myrepo.git # url = https://myaccount@gitlab.com/myaccount/myrepo.git fetch = +refs/heads/*:refs/remotes/origin/*
使用Git存储库永久验证
运行以下命令以启用凭据缓存:
$ git config credential.helper store
$ git push https://github.com/owner/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
您还应该指定缓存过期,
git config credential.helper 'cache --timeout 7200'
启用凭据缓存后,将缓存7200秒(2小时)。43200秒=12小时(每天登录一次)对某些人来说可能也是一个合理的选择。
正如SebastianH所评论的,也可以使用类似的命令来配置,而不是按存储库,而是全局配置:
git config --global credential.helper credential.helper store
git config --global credential.helper 'cache --timeout 7200'