我从我的GitHub帐户克隆了一个Git存储库到我的电脑。

我想使用我的电脑和笔记本电脑,但只有一个GitHub帐户。

当我尝试使用我的电脑推送到GitHub或从GitHub中拉取时,它需要用户名和密码,但当我使用笔记本电脑时不需要!

我不想每次与origin交互时都键入用户名和密码。我在这里缺少什么?


当前回答

直接更新Git配置文件(如果不想记住花哨的命令):

在您喜爱的文本编辑器中打开.git/config文件。它将在您克隆的文件夹中或执行git init的存储库中。进入该存储库。git是一个隐藏的文件夹,按Ctrl+H应该会显示隐藏的文件夹(终端中的ls-a)。

下面是.git/config文件的示例。复制并粘贴这些行,并确保使用Git信息更新这些行。

[user]
        name = Tux
        email = tux@gmail.com
        username = happy_feet

[remote "origin"]
        url = https://github.com/happy_feet/my_code.git
        fetch = +refs/heads/*:refs/remotes/origin/*

将SSH的URL部分更改为以下格式:

url = git@github.com:happy_feet/my_code.git

(以上格式不会随GitHub或Bitbucket等各种Git远程服务器而改变。如果您使用Git进行版本控制,则相同):

注意:连接到远程Git存储库的SSH方式将要求您将公共SSH密钥添加到Git远程服务器(如GitHub或Bitbucket。在设置页面搜索SSH密钥)。

要了解如何生成SSH密钥,请参阅:创建SSH密钥

其他回答

正如许多用户所说,您只需将Git存储库URL从HTTPS更改为SSH即可。

如果您尚未在计算机中生成SSH密钥,那么您将不得不执行此操作。

作为补充信息,在进行此更改后,我仍然收到相同的错误:

权限被拒绝。

在我的案例中,问题是我使用的是Windows Shell来执行ngh命令;由于该命令应打开一个提示以请求SSH短语,而Windows Shell没有打开这些提示,因此身份验证失败。

所以,我只需要打开Gitshell并在那里执行ngh命令,每次它请求时都在提示符中输入SSH短语,然后“voilà”。。。它工作得很好!

除了更改为SSH之外,如果您不介意以明文形式输入密码,您还可以继续使用HTTPS。把这个放到你的~/.netrc中,它不会要求你输入用户名/密码(至少在Linux和Mac上是这样):

machine github.com
       login <user>
       password <password>

添加(请参见VonC的第二条评论):在Windows上,文件名为%HOME%\_netrc。

如果您想加密,请阅读VonC的第一条评论。

如果您有Git 1.7.10或更高版本,则可以使用另一个插件(请参见user137717的注释)。

使用凭据助手在Git中缓存GitHub密码:

如果要使用HTTPS克隆GitHub存储库,可以使用凭据助手,告诉Git记住您的GitHub用户名和密码。

这也适用于Linux、Mac和Windows。

截至2021,HTTPS远程有一个安全、用户友好的跨平台解决方案。不再输入密码!不再有SSH密钥!不再有个人访问令牌!

安装GitHub开发的Git凭据管理器(下载)。它支持对GitHub、BitBucket、Azure和GitLab的无密码浏览器内OAuth认证。这意味着您可以在GitHub和其他平台上启用双因素身份验证,大大提高了帐户的安全性。

推送时,您可以选择身份验证方法:

> git push
Select an authentication method for 'https://github.com/':
  1. Web browser (default)
  2. Device code
  3. Personal access token
option (enter for default): 1
info: please complete authentication in your browser...

在Linux上,需要一点点设置。以下内容将凭据缓存在内存中20小时,因此您每天最多只能进行一次身份验证。

git-credential-manager-core configure
git config --global credential.credentialStore cache
git config --global credential.cacheoptions "--timeout 72000"

熟悉gnomekeyring或KWallet的高级用户可能更喜欢将凭证存储更改为libsecret。

外观配置(文档):

首选在终端而不是GUI中选择身份验证方法(点击次数较少)始终使用浏览器方法,而不是每次都被询问(甚至更少的按键)

git config --global credential.guiPrompt false
git config --global credential.gitHubAuthModes browser

当您使用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/*

对于Windows Git用户,在运行Git-config--globalcredential.helper store后,如果仍然提示输入密码,最好使用以下命令检查配置文件的写入位置

git config --list --show-origin

在我的例子中,在手动编辑配置文件“C:\Program Files\Git\mingw64\etc\gitconfig”并添加以下文本后,它就工作了。

[credential]
    helper = store