我的密钥位于~/.ssh/
其他计算机上,我可以从相关存储库中推送和拉取。
为什么在一台计算机上我总是需要输入我的 github 用户名/密码,而在其他计算机上则不需要?
我可以改变什么来避免这种情况并使用我的 ssh 密钥来代替?
答案1
最简单的方法是创建一个~/.netrc
包含以下内容的文件:
machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_GITHUB_PASSWORD
(如下所示: https://gist.github.com/ahoward/2885020)
您甚至可以关闭此文件的权限,这样就没有人可以通过键入以下内容读取您的密码:
chmod 600 ~/.netrc
答案2
这可以通过将身份验证协议方法从 https 更改为 ssh 来更改
一种选择是重命名或删除现有存储库,然后使用不同的方法“重新克隆”。因此,在mv
ing 或rm -r
ing 当前存储库之后,克隆命令将类似于
git clone [email protected]:user_name/repo_name.git
您可以使用以下命令查看两种方法的差异git config -l
:
对于 https:
...
remote.origin.url=https://github.com/user_name/repo_name.git
...
对于 SSH
...
[email protected]:user_name/repo_name.git
branch.master.rebase=true # This was also created in the ssh method
...
.git/config
您可以看到每个存储库的文件中的差异:
请注意下面“url”的更改。再加rebase = true
上ssh中的添加
http
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://github.com/user_name/repo_name.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
SSH
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = [email protected]:user_name/repo_name.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
因此,如果您只想更改身份验证方法而不“重新克隆”整个存储库,您只需编辑项目.git/config
并更改
url = [email protected]_name/repo_name.git
到
url = https://github.com/user_name/repo_name.git
加加
rebase = true
在底部的“ [branch "master"]
”部分
答案3
您没有指定是否确定您已经在与 github 连接中使用 ssh。很可能在你的其他机器上,github 凭证存储在你不知道的缓存中的某个位置(这是我从 macos/unix 切换到 Linux 系统时的情况)
使用 ssh 类型设置远程。您可以使用以下命令检查 url 类型
git remote -v
您可以更改远程存储库的 url,以便使用 ssh 而不是 https。
而不是 html 网址 https://github.com/username/repo_name
使用 .git 类型 url [电子邮件受保护]:用户名/repo_name.git
使用进行更改
git remote set-url <your_branch_name> <url>