这些天,当我在 GitHub 上的设置页面上创建一个新存储库时,我得到:
git remote add origin https://github.com/nikhilbhardwaj/abc.git
git push -u origin master
每当我必须推送一个提交时,我都需要输入我的 GitHub 用户名和密码。
我可以手动将其更改为
git@github.com:nikhilbhardwaj/abc.git
在 .git/config
中。我觉得这很烦人 - 有什么方法可以将 git 配置为默认使用 SSH?
insteadOf
技巧至少从 2012 年就已经存在。另请参阅 How to convert git:
urls to http:
urls。
将存储库的源分支设置为 SSH
GitHub 存储库设置页面只是一个建议的命令列表(GitHub 现在建议使用 HTTPS 协议)。除非您对 GitHub 的站点具有管理权限,否则我不知道有什么方法可以更改他们建议的命令。
如果您更愿意使用 SSH 协议,只需像这样添加一个远程分支(即使用此命令代替 GitHub 建议的命令)。要修改现有分支,请参阅下一节。
$ git remote add origin git@github.com:nikhilbhardwaj/abc.git
修改预先存在的存储库
如您所知,要将预先存在的存储库切换为使用 SSH 而不是 HTTPS,您可以在 .git/config
文件中更改远程 URL。
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
-url = https://github.com/nikhilbhardwaj/abc.git
+url = git@github.com:nikhilbhardwaj/abc.git
一个快捷方式是使用 set-url
命令:
$ git remote set-url origin git@github.com:nikhilbhardwaj/abc.git
有关 SSH-HTTPS 开关的更多信息
“为什么 Git 总是要求我输入密码?” - GitHub 帮助页面。
GitHub 切换到 Smart HTTP - 相关 StackOverflow 问题
Credential Caching for Wrist-Friendly Git Usage - 关于 HTTPS 以及如何避免重新输入密码的 GitHub 博客文章
GitHub git config --global url.ssh://git@github.com/.insteadOf https://github.com/
BitBucket git config --global url.ssh://git@bitbucket.org/.insteadOf https://bitbucket.org/
这告诉 git 在连接到 GitHub/BitBucket 时始终使用 SSH 而不是 HTTPS,因此默认情况下您将通过证书进行身份验证,而不是提示输入密码。
url.<base>.insteadOf
。
git config --global url.git@github.com:.insteadOf https://github.com/
肯定适用于 git 2.7.4。)
--global
并在 pr repo 基础上执行此操作可能是个好主意。
response provided by Trevor is correct。
但您可以直接在 .gitconfig
中添加以下内容:
# Enforce SSH
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
insteadOf = https://bitbucket.org/
[url "ssh://git@gitlab.com/"]
insteadOf = https://gitlab.com/
如果您想影响推送 URL 但不影响获取,还有 pushInsteadOf
。可以使用 git remote -v
来检查 git 将要使用的有效 URL。
您需要在 ssh 中克隆,而不是在 https 中。
$ ssh-keygen -t ed25519 -C "your_email@example.com"
将 ~/.ssh/id_rsa.pub
的内容添加到 github.com 上的 ssh 密钥。
如果您需要为不同的主机设置单独的密钥,您可以使用此脚本:
#!/usr/bin/env bash
if [ $# -lt 2 ]; then
echo "Provide email and hostname"
exit 1
fi
email="$1"
hostname="$2"
keypath="$HOME/.ssh/${hostname}_rsa"
ssh-keygen -t ed25519 -C $email -f $keypath
if [ ! $? -eq 0 ]; then
echo "Error when running ssh-keygen"
exit 1
fi
exit 0
cat >> $HOME/.ssh/config <<EOF
Host $hostname
Hostname $hostname *.$hostname
User git
IdentitiesOnly yes
IdentityFile $keypath
EOF
像这样运行它
bash generate_ssh.sh your_email@example.com github.com
更改您的远程网址
git remote set-url origin git@github.com:user/foo.git
(或仅编辑 .git/config
)
将 ~/.ssh/github.com_rsa.pub
的内容添加到 github.com 上的 ssh 密钥
检查连接
ssh -T git@github.com
Hostname $hostname *.$hostname
更改为 Hostname $hostname
才能工作。
您可能不小心在 https 而不是 ssh 中克隆了存储库。我在github上多次犯过这个错误。确保在克隆时首先复制 ssh 链接,而不是 https 链接。
SSH 文件
~/.ssh/config file
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
LogLevel QUIET
ConnectTimeout=10
Host github.com
User git
AddKeystoAgent yes
UseKeychain yes
Identityfile ~/github_rsa
编辑 reponame/.git/config
[remote "origin"]
url = git@github.com:username/repo.git
仅供参考 - 由于 github 不再允许 ssh,我正在使用它:
[url "git@github.com:"]
insteadOf = https://github.com/
[url "git@gist.github.com:"]
insteadOf = https://gist.github.com/
虽然这里的其他答案直接回答了名义上的问题(以我不知道的方式!TIL 一些关于 git
的新东西!)关于自动将基于 https
的遥控器变成 git+ssh
的遥控器,“正常”从一开始就“正确”执行此操作的方法是不向 git
提供 https
网址。
GitHub(以及其他流行的 git 托管服务)总是有一个小按钮,可让您获取 git
应克隆的 URL。你只需要点击小的“SSH”按钮:
https://i.stack.imgur.com/scVYE.png
或者对于一个新项目
https://i.stack.imgur.com/DIIeP.png
一旦您选择“SSH”选项,GitHub(和其他人)将记住(只要您登录)并在未来将其设为默认值。