如何让 git 默认为 ssh 而不是 https 对于新的存储库
Posted
技术标签:
【中文标题】如何让 git 默认为 ssh 而不是 https 对于新的存储库【英文标题】:How do I get git to default to ssh and not https for new repositories 【发布时间】:2021-11-01 05:54:40 【问题描述】:这些天,当我在 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?
【问题讨论】:
我认为@MoOx 的回答可能最符合您的要求。insteadOf
技巧至少从 2012 年就已经存在。另请参阅 How to convert git:
urls to http:
urls。
【参考方案1】:
将存储库的源分支设置为 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 开关的信息
"Why is Git always asking for my password?" - GitHub 帮助页面。 GitHub's switch to Smart HTTP - *** 相关问题 Credential Caching for Wrist-Friendly Git Usage - 关于 HTTPS 以及如何避免重新输入密码的 GitHub 博客文章【讨论】:
谢谢,我不知道他们将智能 https 设为默认值。 这可能对 Windows 用户有好处,但在 Linux 上却是一个很大的倒退:ssh 始终有效,而智能 HTTPS 的新密码缓存仅适用于 Windows。 “Mac 版本在哪里?” 上有一个注释,但对于 linux 用户,没有一个单个字。 我要补充一点,这种方法根本不会干扰github的mac客户端。更改它,您可以毫无问题地使用git的命令行和gui版本(github的客户端)。 再次set-url
帮助我!非常感谢!
现在 GitHub 正在弃用密码访问 (see here),看来这个答案需要成为其官方文档的一部分。它已经存在了吗?【参考方案2】:
GitHub
git config --global url.ssh://git@github.com/.insteadOf https://github.com/
比特桶
git config --global url.ssh://git@bitbucket.org/.insteadOf https://bitbucket.org/
这告诉 git 在连接到 GitHub/BitBucket 时始终使用 SSH 而不是 HTTPS,因此默认情况下您将通过证书进行身份验证,而不是提示输入密码。
【讨论】:
如果有人想在the documentation 中查找此内容,请搜索url.<base>.insteadOf
。
小心这似乎破坏了一些东西——我注意到自制软件的一些功能在我做出这个改变后停止工作(即安装非默认版本/分支)
对于 gitlab: git config --global url.ssh://git@gitlab.com/.insteadOf gitlab.com
我认为应该是git config --global url.ssh://git@github.com:.insteadOfgithub.com,因为github喜欢git@github .com:/git config --global url.git@github.com:.insteadOf https://github.com/
肯定在 git 2.7.4 中工作。)--global
并在公关回购的基础上执行此操作可能是个好主意。【参考方案3】:
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/
【讨论】:
简单多了+1 +1 这个技巧。内核人员也推荐它。另请参阅内核新手邮件列表中的git pull。 更清洁的解决方案 - 非常适合 golang 项目,其中“go get”默认为 https,并且希望单独将 url 设置为 ssh,例如用于私人回购等。 对于 Gitlab:[url "ssh://git@gitlab.com/"]
insteadOf = https://gitlab.com/
如果你想影响推送 URL 但不影响获取,还有 pushInsteadOf
。可以使用git remote -v
来检查 git 将要使用的有效 URL。
这不起作用,至少对于现有的存储库而言。【参考方案4】:
你需要在 ssh 中克隆,而不是在 https 中。
为此,您需要设置 ssh 密钥。我准备了这个自动化的小脚本:
#!/usr/bin/env bash
email="$1"
hostname="$2"
hostalias="$hostname"
keypath="$HOME/.ssh/$hostname_rsa"
ssh-keygen -t rsa -C $email -f $keypath
if [ $? -eq 0 ]; then
cat >> ~/.ssh/config <<EOF
Host $hostalias
Hostname $hostname *.$hostname
User git
IdentitiesOnly yes
IdentityFile $keypath
EOF
fi
然后运行它
bash script.sh myemail@example.com github.com
更改您的远程网址
git remote set-url origin git@github.com:user/foo.git
将~/.ssh/github.com_rsa.pub
的内容添加到您在 github.com 上的 ssh 密钥
检查连接
ssh -T git@github.com
【讨论】:
【参考方案5】:您可能不小心在 https 而不是 ssh 中克隆了存储库。 我在github上多次犯过这个错误。 确保在克隆时首先复制 ssh 链接,而不是 https 链接。
【讨论】:
需要用ssh链接克隆一个新的 您还可以将 repo 链接从 HTTP 更改为 SSH,请参阅其他答案。【参考方案6】: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
【讨论】:
【参考方案7】:仅供参考 - 由于 github 不再允许 ssh,我正在使用它:
[url "git@github.com:"]
insteadOf = https://github.com/
[url "git@gist.github.com:"]
insteadOf = https://gist.github.com/
【讨论】:
【参考方案8】:虽然这里的其他答案直接回答了名义上的问题(以一种我不知道的方式是可能的!TIL 一些关于 git
的新东西!)关于自动将基于 https
的遥控器变成 git+ssh
的遥控器,但从一开始就“正确”地做到这一点的“正常”方法是不给git
https
url。
GitHub(以及其他流行的 git 托管服务)总是有一个小按钮,可以让您获取 git
应该克隆的 URL。你只需要点击小“SSH”按钮:
或者用于新项目
一旦您选择“SSH”选项,GitHub(和其他人)会记住(只要您登录)并在将来将其设为默认值。
【讨论】:
以上是关于如何让 git 默认为 ssh 而不是 https 对于新的存储库的主要内容,如果未能解决你的问题,请参考以下文章