Ошибки клонирования HTTPS
При использовании HTTPS с GIT распространен ряд ошибок. Обычно они указывают на то, что у вас старая версия GIT или нет доступа к репозиторию.
Ниже приведен пример возможной ошибки HTTPS:
> error: The requested URL returned error: 401 while accessing
> https://github.com/USER/REPO.git/info/refs?service=git-receive-pack
> fatal: HTTP request failed
> Error: The requested URL returned error: 403 while accessing
> https://github.com/USER/REPO.git/info/refs
> fatal: HTTP request failed
> Error: https://github.com/USER/REPO.git/info/refs not found: did you run git
> update-server-info on the server?
Проверка версии GIT
Ограничений на минимальную версию GIT, требуемую для взаимодействия с GitHub, нет, но, по нашему опыту, версия 1.7.10 является удобной, стабильной версией, доступной на многих платформах. Последнюю версию всегда можно скачать на веб-сайте GIT.
Проверка правильности удаленного репозитория
Репозиторий, который вы пытаетесь получить, должен существовать в GitHub.com.
Чтобы узнать URL-адрес локального репозитория, можно открыть командную строку и ввести git remote -v
:
$ git remote -v
# View existing remotes
> origin https://github.com/ghost/cocoareactive.git (fetch)
> origin https://github.com/ghost/cocoareactive.git (push)
$ git remote set-url origin https://github.com/ghost/ReactiveCocoa.git
# Change the 'origin' remote's URL
$ git remote -v
# Verify new remote URL
> origin https://github.com/ghost/ReactiveCocoa.git (fetch)
> origin https://github.com/ghost/ReactiveCocoa.git (push)
Кроме того, можно изменить URL-адрес с помощью приложения GitHub Desktop.
Предоставление маркера доступа
Чтобы получить доступ к GitHub, необходимо пройти проверку подлинности с помощью personal access token вместо пароля. Дополнительные сведения см. в разделе Управление личными маркерами доступа.
Если вы обращаетесь к организации, используюющей единый вход SAML и используете personal access token (classic), необходимо также авторизовать personal access token для доступа к организации перед проверкой подлинности. Дополнительные сведения см. в разделе "[AUTOTITLE" и "Сведения о проверке подлинности с помощью единого входа SAML](/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on)".
Проверить свои разрешения
При появлении запроса на ввод имени пользователя и пароля используйте учетную запись с доступом к репозиторию.
Tip
Если вы не хотите вводить учетные данные при каждом взаимодействии с удаленный репозиторий, можно включить кэширование учетных данных. Если кэширование учетных данных уже используется, убедитесь в том, что на компьютере кэшированы правильные учетные данные. Неправильные или устаревшие учетные данные не позволят пройти проверку подлинности.
Использование SSH
Если вы ранее настроили ключи SSH, можно использовать URL-адрес клонирования SSH вместо HTTPS. Дополнительные сведения см. в разделе Сведения об удаленных репозиториях.
Ошибка: репозиторий не найден
Если эта ошибка возникает при клонирование репозитория, это означает, что репозиторий не существует или у вас нет разрешения на доступ к нему. В зависимости от причины существует несколько решений для этой ошибки.
Проверка правильности написания
Опечатки происходят. Если вы попытаетесь клонировать git@github.com:owner/repotile.git
, но репозиторий на самом деле называется owner/repoti1e
, произойдет эта ошибка.
Чтобы избежать этой ошибки, при клонировании всегда копируйте URL-адрес клона со страницы репозитория, а затем вставляйте его. Дополнительные сведения см. в разделе Клонирование репозитория.
Сведения об обновлении удаленного в существующем репозитории см. в разделе Управление удаленными репозиториями.
Проверка разрешений
Если вы пытаетесь клонировать частный репозиторий, но не имеете разрешения на его просмотр, произойдет эта ошибка.
Убедитесь в том, что у вас есть один из следующих уровней доступа:
- владелец репозитория;
- участник совместной работы над репозиторием;
- участник команды, которая имеет доступ к репозиторию (если репозиторий принадлежит организации).
Проверка доступа по протоколу SSH
В редких случаях может отсутствовать доступ к репозиторию по протоколу SSH из-за неправильной настройки.
Убедитесь в том, что используемый ключ SSH связан с личной учетной записью на GitHub. Это можно проверить, введя в командную строку следующую команду:
$ ssh -T git@github.com
> Hi USERNAME! You've successfully authenticated, but GitHub does not
> provide shell access.
Если репозиторий принадлежит организации, и вы используете ключ SSH, созданный OAuth app, доступ OAuth app может быть ограничен владелец организации. Дополнительные сведения см. в разделе Сведения об ограничениях доступа к приложению OAuth.
Дополнительные сведения см. в разделе Добавление нового ключа SSH в учетную запись GitHub.
Проверка существования репозитория
Если все остальное не удается, убедитесь, что репозиторий действительно существует на GitHub.com! Если вы пытаетесь выполнить отправку в несуществующий репозиторий, произойдет эта ошибка.
Ошибка: файл HEAD удаленного репозитория ссылается на несуществующую ветвь; не удалось выполнить извлечение
Эта ошибка возникает, если ветвь по умолчанию репозитория удалены на GitHub.com.
Обнаружить эту ошибку легко: GIT предупредит вас при попытке клонировать репозиторий:
$ git clone https://github.com/USER/REPO.git
# Clone a repo
> Cloning into 'repo'...
> remote: Counting objects: 66179, done.
> remote: Compressing objects: 100% (15587/15587), done.
> remote: Total 66179 (delta 46985), reused 65596 (delta 46402)
> Receiving objects: 100% (66179/66179), 51.66 MiB | 667 KiB/s, done.
> Resolving deltas: 100% (46985/46985), done.
> warning: remote HEAD refers to nonexistent ref, unable to checkout.
Чтобы устранить ошибку, необходимо быть администратором репозитория на GitHub.com. Вам потребуется изменить ветвь по умолчанию репозитория.
После этого можно получить список всех доступных ветвей из командной строки:
$ git branch -a
# Lists ALL the branches
> remotes/origin/awesome
> remotes/origin/more-work
> remotes/origin/new-main
Затем можно просто переключиться на новую ветвь:
$ git checkout new-main
# Create and checkout a tracking branch
> Branch new-main set up to track remote branch new-main from origin.
> Switched to a new branch 'new-main'