Git强制使用HTTPS

时间:2019-04-03 15:56:16

标签: git github ssh macos-mojave

我创建了一个GitHub存储库,然后使用SSH对其进行了克隆:

git clone git@github.com:BenReilly/all-the-characters.git

我添加了一些文件。

git add .
git commit -m "some message"
git push

这导致系统提示您输入我的用户名和密码。它本身有点怪异,但无论如何我还是输入了它们。然后我得到:

> remote: Anonymous access to BenReilly/all-the-characters.git denied.
> fatal: Authentication failed for 'https://github.com/BenReilly/all-the-characters.git/'

HTTPS?什么?

git remote -v
> origin  https://github.com/BenReilly/all-the-characters.git (fetch)
> origin  https://github.com/BenReilly/all-the-characters.git (push)

哦。

git remote set-url origin git@github.com:BenReilly/all-the-characters.git
git remote -v
> origin  https://github.com/BenReilly/all-the-characters.git (fetch)
> origin  https://github.com/BenReilly/all-the-characters.git (push)

这是因为它不在我的osxkeychain中吗?

请确保已完成ssh-add -K ~/.ssh/<key id>并确保已定义~/.ssh/config文件。行为无变化。我还验证了密钥在我的GitHub设置中。

我在MacOS Mojave(10.14.1)上,使用的是Git版本2.17.2。

为什么Git会强制使用HTTPS并忽略我设置SSH地址的尝试?

ETA .git/config文件

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
[remote "origin"]
        url = git@github.com:BenReilly/all-the-characters.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

1 个答案:

答案 0 :(得分:1)

Git配置具有一个insteadOf option

  

inboundMessage

     

任何以该值开头的URL都将改写为以outboundMessage开始。如果某些站点提供大量存储库,并通过多种访问方式为它们提供服务,而某些用户需要使用不同的访问方式,则此功能允许用户指定任何等效的URL,并让Git自动将URL重写为特定用户的最佳选择,即使是网站上前所未有的存储库。如果有多个notOfOf字符串与给定的URL匹配,则使用最长的匹配。

基本上,如果您运行类似

url.<base>.insteadOf

您将在全局Git配置(在类似Unix的计算机上为<base>)上添加一个节,类似

git config --global url.https://.insteadOf git://

,这将导致Git自动将以~/.gitconfig开头的任何远程转换为以[url "https://"] insteadOf = git:// 开头的远程。用git://查看您的全局配置,看看是否有https://条目。