Як перетворити `git:` urls в `http:` urls


139

Я працюю за проксі-сервером http. Я намагаюся клонувати початкове дерево Android за допомогою їх інструменту "repo".

Цей інструмент наполягає на використанні 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

Тож ця відповідь не дуже допомагає мені.


Відповіді:


297

Ось приклад переписання протоколу за замовчуванням для 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-адреси відповідають даній URL-адресі, використовується найдовша відповідність.


19
допомагає, коли брандмауер блокує протокол git! :)
Войтек Турович

Чи можу я задати тут питання? Я використовував це, але писав "heeps", а не "https". Як я можу це виправити? Чи 'git config --global.url. github.com/.insteadOf heeps: //github.com/ 'робота?
Xuxu

1
Порада: git remote -vодразу показує ефект insteadOfі pushInsteadOfналаштовує
Бені Чернявський-Паскін

Це працювало для мене у загальнодоступному Wi-Fi із заблокованим 22-портовим. Як конфігурацію можна повернути до стандартних?
yivo

14
Ця відповідь майже зробила це для мене, за винятком того, що моє сховище використовувало git@github.com:...формат для URL-адрес. Це спрацювало: git config --global url."https://github.com/".insteadOf 'git@github.com:'для мене.
kraenhansen

35

Я не знаю, як цей інструмент repo використовує Git (і якщо ви можете налаштувати 'repo' на використання протоколу http), але ви можете спробувати його випробувати за допомогою url.<base>.insteadOfзмінної конфігурації (див. Mantages git-config та git-fetch ).

Ви намагалися використовувати core.gitProxyдля проходження через брандмауер, якщо це проблема із використанням протоколу git?


2
Дякую, ця змінна "umjestoOf" - саме те, що мені було потрібно.
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необхідне; просто додавання цієї конфігурації до базового каталогу репозиторію не працює.


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.