Нажатие на Git возвращает код ошибки 403 неустранимый: HTTP-запрос не выполнен

634

Мне удалось клонировать копию этого репозитория с проверкой подлинности по протоколу HTTPS. Я сделал несколько коммитов и хочу вернуться на сервер GitHub. Использование Cygwin на Windows 7 x64.

C:\cygwin\home\XPherior\Code\lunch_call>git push
Password:
error: The requested URL returned error: 403 while accessing https://MichaelDrog
alis@github.com/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

Также настройте его с подробным режимом. Я все еще довольно сбит с толку.

C:\cygwin\home\XPherior\Code\lunch_call>set GIT_CURL_VERBOSE=1

C:\cygwin\home\XPherior\Code\lunch_call>git push
Password:
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 207.97.227.239... * 0x23cb740 is at send pipe head!
* Connected to github.com (207.97.227.239) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git/bin/curl-ca-bundle.crt
  CApath: none
* SSL connection using AES256-SHA
* Server certificate:
*        subject: 2.5.4.15=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.
3.6.1.4.1.311.60.2.1.2=California; serialNumber=C3268102; C=US; ST=California; L
=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2011-05-27 00:00:00 GMT
*        expire date: 2013-07-29 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert High Ass
urance EV CA-1
*        SSL certificate verify ok.
> GET /derekerdmann/lunch_call.git/info/refs?service=git-receive-pack HTTP/1.1
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

< HTTP/1.1 401 Authorization Required
< Server: nginx/1.0.4
< Date: Thu, 15 Sep 2011 22:44:41 GMT
< Content-Type: text/plain
< Connection: keep-alive
< Content-Length: 55
< WWW-Authenticate: Basic realm="GitHub"
<
* Ignoring the response-body
* Expire cleared
* Connection #0 to host github.com left intact
* Issue another request to this URL: 'https://MichaelDrogalis@github.com/dereker
dmann/lunch_call.git/info/refs?service=git-receive-pack'
* Couldn't find host github.com in the _netrc file; using defaults
* Re-using existing connection! (#0) with host github.com
* Connected to github.com (207.97.227.239) port 443 (#0)
* 0x23cb740 is at send pipe head!
* Server auth using Basic with user 'MichaelDrogalis'
> GET /derekerdmann/lunch_call.git/info/refs?service=git-receive-pack HTTP/1.1
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

< HTTP/1.1 401 Authorization Required
< Server: nginx/1.0.4
< Date: Thu, 15 Sep 2011 22:44:41 GMT
< Content-Type: text/plain
< Connection: keep-alive
< Content-Length: 55
* Authentication problem. Ignoring this.
< WWW-Authenticate: Basic realm="GitHub"
* The requested URL returned error: 401
* Closing connection #0
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 207.97.227.239... * 0x23cb740 is at send pipe head!
* Connected to github.com (207.97.227.239) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git/bin/curl-ca-bundle.crt
  CApath: none
* SSL re-using session ID
* SSL connection using AES256-SHA
* old SSL session ID is stale, removing
* Server certificate:
*        subject: 2.5.4.15=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.
3.6.1.4.1.311.60.2.1.2=California; serialNumber=C3268102; C=US; ST=California; L
=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2011-05-27 00:00:00 GMT
*        expire date: 2013-07-29 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert High Ass
urance EV CA-1
*        SSL certificate verify ok.
* Server auth using Basic with user 'MichaelDrogalis'
> GET /derekerdmann/lunch_call.git/info/refs HTTP/1.1
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
User-Agent: git/1.7.4.3282.g844cb
Host: github.com
Accept: */*
Pragma: no-cache

* The requested URL returned error: 403
* Expire cleared
* Closing connection #0
error: The requested URL returned error: 403 while accessing https://MichaelDrog
alis@github.com/derekerdmann/lunch_call.git/info/refs

fatal: HTTP request failed

Вот версии git и curl, которые у меня есть:

C:\Users\XPherior>git --version
git version 1.7.4.msysgit.0

C:\Users\XPherior>curl --version
curl 7.21.7 (amd64-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8r zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtsp
smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz
Майк
источник
3
Посмотрите на комментарий, который должен быть опубликован как ответ. Сделал так, чтобы он работал с 1.7.1, также имел проблему с пропуском User / Password. Реквизит для stackoverflow.com/a/9575906/805284 ...
sjas
2
проверить, есть ли у пользователя права на чтение / запись в хранилище
Céline Aussourd
22
В будущем не вставляйте «Authorization: Basic <stuff>» при показе примеров заголовков http. Это легко декодировать с помощью base64 и получить свой пароль. @mike: если вы не меняли свой пароль на GitHub с момента публикации этого вопроса, я бы посоветовал вам сделать это.
FlipMcF
4
@FlipMcF Спасибо, парень. Был не в курсе. Пароль изменен.
Майк
6
@Mike NP. Теперь я беззастенчиво рекламирую небольшой блог, который я написал на нем: goo.gl/bpae94
FlipMcF

Ответы:

836

У меня такая же проблема, и я выяснил причину.

Github, кажется, поддерживает только ssh способ чтения и записи репозитория, хотя в https также отображается «Read & Write».

Поэтому вам нужно изменить конфигурацию репо на вашем ПК на ssh:

  1. отредактируйте .git/configфайл в вашей директории репо
  2. найти url=запись в разделе[remote "origin"]
  3. изменить его с url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.gitна url=ssh://git@github.com/derekerdmann/lunch_call.git. то есть измените все тексты перед @символом наssh://git
  4. Сохраните configфайл и выйдите. теперь вы можете использовать git push origin masterдля синхронизации репо на GitHub
Xiao
источник
56
Это часто встречается, когда вы клонируете адрес git только для чтения (который используется по умолчанию, когда вы не вошли в систему) вместо ssh-адреса read + write.
Нитродист 15.11.11
43
Моя .git/configбыла больше похожа, url=https://github.com/mynickname/my_repo.gitно я тоже изменил ее, url=ssh://git@github.com/mynickname/my_repo.gitи она сделала свое дело
Гийом Фландр,
12
Вы можете изменить URL репо с помощью git remote set-urlкоманды. Смотрите мой ответ ниже.
fetsh
7
или просто измените его из командной строки, используяgit remote set-url <name> git@github.com:<username>/<repo>.git
iGbanam
42
Для тех, кто ищет решение не SSH, проверьте несколько других ответов здесь. Добавление вашего имени пользователя в https URL, похоже, работает. (измените URL конфигурации так, чтобы https: // @ github.com / ... был UNAME@github.com / ... )
Cyrus
431

Чтобы определенно иметь возможность войти в систему с использованием httpsпротокола, вы должны сначала установить свои учетные данные для аутентификации в git Remote URI :

git remote set-url origin https://yourusername@github.com/user/repo.git

Тогда вам будет предложено ввести пароль при попытке git push.

На самом деле, это в формате аутентификации http. Вы также можете установить пароль:

https://youruser:password@github.com/user/repo.git

Вы должны знать, что если вы сделаете это, ваш пароль на github будет сохранен в виде открытого текста в вашем каталоге .git, что, очевидно, нежелательно.

Тьяго Маседо
источник
12
SSH заблокирован на работе, поэтому я должен использовать HTTPS. Добавление имени пользователя исправляет мои проблемы.
Дэвид Пул
32
Это должен быть принятый ответ. Нет причин вручную редактировать файл конфигурации, если к нему есть интерфейс командной строки.
Стив Беннетт
4
Кроме того, для меня этот способ ( имя пользователя @ github ... ) запрашивал пароль и работал, тогда как ssh: // git @ github ... не ожидал аутентификации с открытым ключом.
Стив Беннетт
1
работает и должен быть принятым ответом! Особенно в среде, где ssh не работает, это путь. Спасибо!
AndreasEK
3
@Achint это формат аутентификации. Вы также можете установить свой пароль, https://youruser:password@github.com/user/repo.gitнесмотря на небезопасность
Thiago Macedo
113

Одно небольшое дополнение к ответу Шона .

Вместо того, чтобы редактировать .git/configфайл вручную, вы можете использовать git remote set-urlкоманду.

В вашем случае это должно быть:

git remote set-url origin ssh://git@github.com/derekerdmann/lunch_call.git

Я считаю это проще и чище, чем возиться с дот-файлами.

fetsh
источник
Я не знаю, был ли это просто старый пост, и git изменился, но как сегодня, чтобы исправить проблему, мне пришлось использовать git remote set-url origin ssh://git@github.com:derekerdmann/lunch_call.gitдвоеточие между github.com и именем репо
KevinL
57

Отредактируйте .git/configфайл в вашей директории репо

Найти url=запись в разделе[remote "origin"]

Измените это с url=https://github.com/rootux/ms-Dropdown.gitна https://USERNAME@github.com/rootux/ms-Dropdown.git

где USERNAMEтвое имя пользователя github

Гал Брача
источник
Этот ответ не относится к моей проблеме. Мой URL-адрес .git/configустановлен на « github.com/myrepo/subproject» .
килоджоулей
Была эта проблема с Android Studio. Работает отлично.
AndroidDev
46

Другие ответы, которые предлагают переключиться на SSH, упускают из виду. HTTPS поддерживается, но вы должны войти в систему с вашим паролем GITHUB, а не вашей парольной фразой SSH (именно это и дало мне точно такую ​​же ошибку).

У меня возникла та же проблема, но использование моего действительного пароля GitHub в строке ввода пароля терминала устранило решение без изменения конфигурации или обращения к SSH.

Причина, по которой это важно отметить, заключается в том, что многие государственные учреждения (например, моя школа) будут блокировать SSH, но разрешать HTTPS (это единственная причина, по которой я начал клонировать поверх HTTPS).

Надеюсь, что это помогает кому-то еще с той же проблемой ...

BMB
источник
1
но почему? Я не должен был делать это в прошлом. Срок действия сертификата истек, или что-то?
Туфир
Не уверен, я не эксперт, вот как я заставил его работать в моем случае :)
BMB
Тот же @Thufir. Я понятия не имею, почему это вдруг сработало.
Ник Мэннинг
Я просто вхожу в систему с моим именем пользователя и паролем в браузере. НО, когда я пытаюсь, git pushменя просят о au и p, и результат - отказано в разрешении .... Вы знаете, что я пропускаю?
Омар
26

Та же ошибка и разрешение в Mac OS X.

Все работало нормально, пока я не создал новую учетную запись на GitHub и не попытался нажать

$ git push -u origin master

И получил ошибку:

удаленный: разрешение для NEWUSER / NEWREPO.git запрещено OLDUSER. фатальный: невозможно получить доступ https://github.com/NEWUSER/NEWREPO.git/ »: запрошенный URL вернул ошибку: 403

Это должно быть исправлено путем установки user.name для глобального или текущего репо

$ git config –-global user.name NEWUSER
$ git config user.name NEWUSER

Но это не так.

Я исправил это, удалив OLDUSER, связанный с GitHub, из приложения Keychain Access в разделе пароли. Затем команда push прошла успешно.

$ git push -u origin master

ссылка

zeeawan
источник
Удаление OLDUSER из приложения Keychain Access сработало для меня
Аугусто Тристе,
1
Я получил ту же ошибку, но по другой, но связанной причине, которая требовала другого решения. Я пытался подтолкнуть к репо, где у меня нет прав на запись (я не соавтор). Это было больше из-за моего отсутствия знаний о том, как внести свой вклад в репо, не мое. Я думал, что мог бы просто создать новую ветку и затем сделать запрос на удаление. Не так. Сначала я должен раскошелиться на репо, внести свои изменения в форк, а затем сделать запрос на извлечение из моего разветвленного репо в исходное репо. Вероятно, глупая ошибка с моей стороны, но если я смогу это сделать, то я уверен, что другие n00bs могли бы. :)
Neo
23

Если вы используете Windows, иногда это может произойти, потому что Windows хранит учетные данные для внешнего репо (в нашем случае github) в своем собственном хранилище. И сохраненные там учетные данные могут отличаться от тех, которые вам нужны прямо сейчас.

введите описание изображения здесь

Поэтому, чтобы избежать этой проблемы, просто найдите github в этом хранилище и удалите сохраненные учетные данные. После этого во время нажатия git запросит ваши учетные данные и позволит вам нажать.

Эндрю Ганс
источник
«Возможно, вам придется проверить диспетчер учетных данных Windows и удалить запись github в разделе control panel > user accounts > credential manager > Windows credentials > Generic credentials« Подробности из этого поста: stackoverflow.com/a/37450495
Мигель
Это работает для меня, я боролся почти 2 дня и, наконец, пришел к решению. Большое спасибо.
Суфиян Ансари
1
Вы спасли мою жизнь!
напиши ToBhuwan
1
Я сталкивался с этой проблемой более месяца, спасибо
Самсон Нзуки
1
Genius. Большое спасибо
Винод Кумар
18

Это работает для меня -:

git remote set-url origin https://username@github.com/user/repo.git

Надеюсь, поможет

stevensagaar
источник
1
хорошая работа. установить пользователя!
marlonpya
1
Это решение помогло с git v1.7 в CentOS 6.10 x86. Я ожидал, что появится запрос пароля (вместо ключа SSH), и он сделал это (предварительно добавив <username>@перед github.comудаленным URL). Спасибо!
вулкан ворон
17

Я думаю, что @deepwaters получил правильный ответ для более старых версий. URL-адрес HTTPS должен иметь имя пользователя. У меня был git 1.7.0.4, и я git push origin masterдаже не спрашивал пароль, пока не добавил его.

nisah
источник
11

Код 403 - «Запрещено». Сервер увидел ваш запрос и отклонил его. У вас есть разрешение отправить в этот репозиторий?

Ник Вейс
источник
1
У меня и друга одна и та же проблема. Репо мое, и он не может толкнуть. Как мы это исправим?
Гибсон
как получить персмиссон
Баванта
9

У меня на самом деле было очень простое решение этой проблемы. Все, что я сделал, это изменил конфигурационный файл git по-другому после клонирования репозитория. URL удаленного источника - это то, что вам нужно отредактировать в файле конфигурации по умолчанию . Это должно выглядеть как показано ниже

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = https://*username*@github.com/*username*/*repository*.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
larrytech
источник
^ это (или любой из его вариантов ниже)
Остин Франция
Добавление имени пользователя до того, как github.com исправил это для меня.
Шейн
Добро пожаловать @ ÅdəəlÅhmåd. Поддержите усилие, проголосовав за ответ, чтобы многие могли оценить.
Larrytech
8

Догадаться. Я клонировал по HTTPS. Установка моих открытых ключей SSH, клонирование по SSH и проталкивание по SSH исправили это.

Майк
источник
Хм ... но что, если вы не можете использовать что-либо кроме https, например, из-за брандмауэра corp? ... Согласно блогу github, доступ https был добавлен в github только для этой цели?
Филофель
1
Я действительно не знаю. Теперь я всегда клонирую по SSH.
Майк
Просто для потомков (я заметил временную метку), в отношении комментария филофеля: Проверьте мой ответ, перечисленный выше. У меня есть то же ограничение, о котором вы упоминали, в моей школе, и обнаружил, что вводил неверный пароль / фразу-пароль для запроса терминала. Надеюсь, что это поможет другим людям с той же проблемой.
BMB
8
  1. Нажмите на свой репозиторий
  2. На правой стороне, нажмите на «Настройки»
  3. На левой панели параметров нажмите «Соавторы»
  4. Добавьте имя человека, которого вы знаете, в GitHub
  5. Нажмите «Добавить соавторов»

После этого наш "Push to Git" работал нормально.

Кришна
источник
Спасибо! действительно полезно!
sailfish009
7

Сделайте это для временного исправления

git push -u https://username:password@github.com/username/repo_name.git master

x0v
источник
просто и работает
Bawantha
6

Я столкнулся с той же ошибкой, и причина была глупой - у меня не было привилегий для фиксации в выбранном репозитории. Я не знал, что я должен

  1. сначала выберите выбранный проект
  2. клонировать хранилище локально
  3. зафиксировать мои изменения локально
  4. нажмите изменения в моем github клоне
  5. запрос тянуть запрос в апстрим

как описано в https://help.github.com/categories/63/articles

Леос Литерак
источник
1
Не глупо, это правильный ответ для большинства новых участников публичных репозиториев.
DaReal
5

Для тех, у кого есть разрешение на ошибку 403 при использовании ssh (согласно Xiao ) или http urls, попробуйте эти команды

>git config --global --unset-all credential.helper

>git config --unset-all credential.helper

с правами администратора

>git config --system --unset-all credential.helper
Муса Белудж
источник
Теперь каждый раз Git будет запрашивать логин и пароль. Сохраните их до конца git config --global credential.helper store.
CoolMind
4

изменить это с

url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.git 

в

url=ssh://git@github.com/derekerdmann/lunch_call.git

Оно работает!

Не забывайте про «мерзавец» перед «@».

JimmyDong
источник
У меня это сработало (используя CentOS Server с RStudio за прокси). Сначала установите прокси: git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:portзатем используйте команду git remote set-url originдля переключения адреса.
Александр Жорж
3

Для любого любопытного, мой компьютер Mac против lucid vm запускал git 1.7.6 против 1.7.0.4, и точно такой же репозиторий можно было перенести с моего mac (более новый git), но не с виртуальной машины

Та же самая версия. Возможно, некоторые старые версии git не поддерживают нажатия https?

patcon
источник
Да, здесь работает https push to github (даже через прокси с паролем). Я использую git 1.7.3. Для меня это сначала не удалось, потому что я набрал неправильный пароль.
Геттли
9
Это работает для меня с git 1.7.1, но есть одна вещь, на которую вы должны обратить внимание (и это было то, что я пропустил в моей первой попытке): дать имя пользователя в HTTPS-URL, т.е.url=https://username@github.com/username/repo.git
lwho
3

Добавьте имя пользователя как часть URL-адреса, и эта ошибка возникает из-за того, что команда git выполняет http вместо https. Так что установите URL

git remote set-url origin https://<username>@github.com/Path_to_repo.git

После чего вам будет предложено ввести пароль:

Венкат Сэм
источник
3

Что сработало для меня:

Мой репо был вилкой и все еще был связан с репо родителей.

git remote -v

Скажу вам, если это ваш репо или нет.

git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git

Позволяет перенастроить его на репо, а затем разрешить пуш.

timxor
источник
3

Ни один из приведенных выше ответов не работал для моей enterpriseучетной записи GitHub. Выполните следующие шаги для проталкивания через способ генерации ключей ssh.

Создайте репо, посетив свой git аккаунт.

Создать ключ SSH:

ssh-keygen -t rsa -C "your_email@example.com"

Скопируйте содержимое файла ~ / .ssh / id_rsa.pub в ключи SSH в настройках учетной записи GitHub. Тестовый ключ SSH:

ssh -T git@github.com
clone the repo:
git clone git://github.com/username/your-repository

Теперь перейдите в вашу папку git clone и выполните:

git remote set-url origin git@github.com:username/your-repository.git

Теперь попробуйте отредактировать файл (попробуйте README) и затем выполните:

git add -A
git commit -am "my update msg"
git push -u origin master

Обновление: новая версия git, похоже, рекомендует не иметь никаких файлов при создании нового репо. Отсюда сделать пустой репо.

CKM
источник
2

Я выяснил свой вариант этой проблемы.

Проблема не в том, чтобы изменить протокол с https на ssl, а в том, чтобы установить глобальное имя пользователя и адрес электронной почты Github! (Я пытался подтолкнуть к частному хранилищу.

git config --global user.email "your_github_email_@email.com"

git config --global user.name "Your full name"
Лукас Оу-Ян
источник
Не работает для меня Конфиг установлен, используйте github.com .. без '@' в нем
ses
1

У меня была эта проблема прямо сейчас, и оказалось, что мой файл сервера /etc/resolver.conf имеет неверный IP-адрес. Мог бы помочь другим.

RichardW11
источник
1

Это случилось со мной, потому что мой коллега случайно отключил хранилище, из которого был создан этот репозиторий. Просто проверьте, действительно ли существует репозиторий git (hub).

ftrotter
источник
1

Это может быть проблема бухгалтерского учета. Учетная запись Github владельца репо (частного) не может быть финансовой. Я видел это там, где истек срок действия кредитной карты клиента.

gnoll110
источник
1

то, что работало для меня, меняется с http на ssh:

git remote rm origin
git remote add origin git@github.com:username/repoName.git

затем проверьте это с git remote -v

Коннор Лич
источник
1

Я была такая же проблема. Мой случай был: я инициализировал git repo локально, прежде чем создал его на github, затем попытался добавить удаленную ветку. Я решил свою проблему, изменив порядок действий: создал репо на сайте github, а затем инициировал его локально. Но это не тот случай, когда им нравится делать все из командной строки, как я.

Yauhen
источник