Как преобразовать URL-адреса git: в URL-адреса http:

141

Я работаю за http-прокси. Я пытаюсь клонировать исходное дерево Android, используя их инструмент «репо».

Этот инструмент настаивает на использовании git://URL-адресов, хотя http://URL-адреса тоже работают. В результате я не могу скачать исходник.

Можно ли заставить gitвсегда пользоваться http?

Изменить: мой http_proxy настроен правильно. Например, это работает:

git clone http://android.git.kernel.org/platform/manifest.git

Но этого не происходит (errno = время ожидания соединения истекло):

git clone git://android.git.kernel.org/platform/manifest.git

Так что этот ответ мне не особо помогает.

noamtm
источник
См. Предыдущий ответ .
Джон Полетт,

Ответы:

299

Вот пример переписывания протокола по умолчанию для GitHub:

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

Документация Git для url.<base>.insteadOf:

git config [--global] url.<base>.insteadOf <other_url>

Любой URL-адрес, начинающийся с этого значения, будет заменен на начинающийся с <base>. Когда с данным URL-адресом соответствует несколько строк вместо одной, используется самое длинное совпадение.

Тобу
источник
19
помогает, когда брандмауэр блокирует протокол git! :)
Wojtek Turowicz
Могу я здесь задать вопрос? Я использовал это, но написал «heeps», а не «https». Как я могу это исправить? Имеет ли git config --global.url. github.com/.insteadOf heeps: //github.com/ 'работает?
Сюйю
1
Совет: git remote -vсразу показывает эффект insteadOfи pushInsteadOfконфиги
Бени Чернявский-Паскин
Это сработало для меня в общедоступном WiFi с заблокированным 22 портом. Как вернуть конфигурацию к значениям по умолчанию?
yivo
14
Этот ответ почти сработал для меня, за исключением того, что мой репозиторий использовал git@github.com:...формат для URL-адресов. Это сработало: git config --global url."https://github.com/".insteadOf 'git@github.com:'для меня.
kraenhansen
35

Я не знаю, как этот инструмент репо использует Git (и если вы можете настроить репо для использования протокола http), но вы можете попытаться обмануть его, используя url.<base>.insteadOfпеременную конфигурации (см. Справочные страницы git-config и git-fetch ).

Пробовали ли вы использовать core.gitProxyдля прохождения через брандмауэр, если это проблема с использованием протокола git?

Якуб Наребски
источник
2
Спасибо, эта переменная "вместо" - именно то, что мне нужно.
noamtm
23

У меня была такая же проблема с рекурсивным получением подмодулей в репозитории git. Я за сумасшедшим брандмауэром, который не разрешает исходящие соединения через порт git. Некоторые из подмодулей подмодулей были закодированы как git://github.com/blah/blah.git. Это убило мою рекурсивную популяцию подмодулей. Обходной путь следующий:

git config --global url."https://<GITUSERNAME>@".insteadOf git://

Это заменяет git://на https://<GITUSERNAME>@во всех URL-адресах репозитория подмодулей. Вам нужно заменить <GITUSERNAME>свое собственное имя пользователя git. Также обратите внимание, что --globalтребуется; просто добавить эту конфигурацию в каталог базового репозитория не получится.

Crcastle
источник
3
Y не просто использовать git config --global url. "Https: //" .insteadOf git: // как показано здесь? github.com/angular/angular-phonecat/issues/141 Я имею в виду, обязательно ли имя пользователя?
Αλέκος
3

Вы можете проверить ~/.gitconfig, перезаписываете ли вы SSH с помощью https: // или наоборот.

Piperchester
источник