Git заставляет использовать HTTPS - PullRequest
1 голос
/ 03 апреля 2019

Я создал репозиторий 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 file

[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 Ответ

1 голос
/ 03 апреля 2019

Git config имеет параметр insteadOf :

url.<base>.insteadOf

Любой URL, начинающийся с этого значения, будет перезаписан для запуска вместо <base>. В тех случаях, когда какой-либо сайт обслуживает большое количество репозиториев и обслуживает их множественными методами доступа, а некоторым пользователям необходимо использовать разные методы доступа, эта функция позволяет пользователям указывать любой из эквивалентных URL-адресов, а Git автоматически переписывает URL-адрес в лучшая альтернатива для конкретного пользователя, даже для никогда ранее не встречавшегося хранилища на сайте. Если вместо одного URL-адреса совпадают несколько строк, используется самое длинное соответствие.

В основном, если вы запускаете что-то вроде

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

к вашей глобальной конфигурации Git добавится раздел (~/.gitconfig на Unix-подобных машинах), который выглядит примерно так:

[url "https://"]
    insteadOf = git://

, что приведет к тому, что Git автоматически переведет все удаленные, начинающиеся с git://, в удаленные, начинающиеся с https://. Посмотрите на вашу глобальную конфигурацию с помощью git config --global --list и посмотрите, есть ли какие-либо записи insteadOf.

...