我如何让git默认为ssh而不是新存储库的https


205

这些天,当我在设置页面上的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年开始就存在这种技巧。另请参阅如何将git:url 转换为http:url
jww

Answers:


299

将存储库的原始分支设置为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开关的更多信息


谢谢,我不知道他们将智能https设置为默认值。
nikhil 2012年

3
这对于Windows用户可能很好,但是在Linux上却倒退了一步:ssh始终有效,并且Smart HTTPS的新密码缓存仅在Windows上有效。关于“ Mac版本在哪里?”的注释。但不是一个单一的 Linux用户字。
MestreLion 2012年

我应该补充一点,此方法完全不会干扰github的mac客户端。更改它,您就可以使用命令行和gui的gui版本(github的客户端)了,没有问题。
2013年

1
再次set-url帮助我!非常感谢 !
guozqzzu

181
  • 的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,因此默认情况下,您将通过证书进行身份验证,而不是提示输入密码。


4
如果有人想在文档中查找,请搜索url.<base>.insteadOf

2
警惕,这似乎会破坏某些东西-我注意到进行此更改后,自制软件的某些功能停止工作(即安装非默认版本/分支)
前缀为

1
对于gitlab:git config --global url.ssh://git@gitlab.com/.insteadOf gitlab.com
MoOx 2016年

2
认为应该是git config --global url.ssh://git@github.com:.insteadOf github.com,因为github喜欢git@github.com:<USERNAME> / <REPO> .git。(git config --global url.git@github.com:.insteadOf https://github.com/肯定可以在git 2.7.4中进行编辑。)
Glen Keane

1
由于此处的评论提到了自制问题,因此最好删除--global并按回购原则进行操作。
Pylinux

58

Trevor提供答案是正确的

但是,您可以在这里直接添加以下内容.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/

2
+1更简单
PiersyP

+1。内核人员也推荐这样做。另请参阅内核新手邮件列表上的git pull
jww

更干净的解决方案-非常适合golang项目,其中“ go get”默认为https,并且一个人希望将网址分别设置为ssh,例如用于私有存储库等
。– colm.anseo,

1
对于Gitlab:[url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/还有pushInsteadOf,如果你想影响推网址,而不取。可以git remote -v用来检查git将要使用的有效URL。
贝尼·切尔尼亚夫斯基-帕斯金

这是行不通的,至少对于现有存储库而言。
安德鲁·科斯特

4

您可能不小心将存储库克隆到了https而不是ssh中。我在github上无数次犯了这个错误。确保克隆时首先复制ssh链接,而不是https链接。


需要克隆一个新的用ssh连接
codenamezero

您还可以将回购链接从HTTP更改为SSH,请参见其他答案。
Mike Lyons

3

您需要克隆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

更改您的远程URL

git remote set-url origin git@github.com:user/foo.git

将内容添加~/.ssh/github.com_rsa.pub到github.com上的ssh密钥中

检查连接

ssh -T git@github.com

0

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.