Как настроить git для извлечения из http и проталкивания через ssh на одном «удаленном»?

Вытягивание из http, чтобы избежать аутентификации (поэтому мне не нужно вводить пароль, если я не использую ssh.keygen).

Проталкивание по ssh с аутентификацией.


person Tsung.W    schedule 24.08.2010    source источник


Ответы (2)


На git-config справочной странице:

remote.<name>.url URL удаленного репозитория. См. git-fetch(1) или git-push(1).

remote.<name>.pushurl URL-адрес для отправки удаленного репозитория. См. git-push(1).

Попробуйте установить для первого URL-адрес http:, а для второго — URL-адрес git+ssh: (или просто git:)?

person Amber    schedule 24.08.2010
comment
Спасибо!! просто отредактируйте файл .git/config, измените его следующим образом: [удаленный источник] fetch = +refs/heads/*:refs/remotes/origin/* url = git.yoursite.com/your_project.git pushurl = [email protected]:/home/git/repositories/your_project.git - person Tsung.W; 24.08.2010
comment
@Amber - Можете ли вы привести пример этого? Я не совсем следую примеру Цунга в комментариях. - person jww; 18.11.2017
comment
@jww Я добавил пример с точной командой git config и результирующим результатом конфигурации git. - person VonC; 04.08.2018

Исходный ответ для проталкивания через ssh в одном «удаленном»: это относится только к одному репозиторию, текущему:

Если у вас есть git remote -v, который возвращает URL-адрес https для «origin», вы можете ввести:

git config remote.origin.pushurl [email protected]:aUser/aRepo

Или скорее:

git remote set-url --push [email protected]:aUSer/aRepo

Как отмечено здесь:

Функционально это не отличается, так как set-url внутри просто вызывает config. Но set-url будет жаловаться, если вы неправильно наберете часть команды «git remote set-url --push», тогда как git config молча примет ошибочно введенные параметры, но не сможет фактически установить URL-адрес удаленного устройства.

См. git-reference (здесь адаптировано ):

$ git remote -v
origin  https://github.com/schacon/git-reference.git (fetch)
origin  https://github.com/schacon/git-reference.git (push)

$ git remote set-url --push origin [email protected]:schacon/git-reference.git

$ git remote -v
origin  https://github.com/schacon/git-reference.git (fetch)
origin  [email protected]:schacon/git-reference.git (push)

В контексте вознаграждения jww добавляет:

Я хочу, чтобы это применялось ко всему github.com, а не только к моим репозиториям.

Тогда git remote это не ответ.

Только url.<base>.pushInsteadOf будет применяться ко всем репозитории:

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

So:

 git config --global url."[email protected]:".pushInsteadOf https://github.com/
 # or
 git config --global url."ssh://[email protected]/".pushInsteadOf https://github.com/

Я упоминал этот вариант в 2014 году в статье «Git: как получить общедоступный URL-адрес git:// только для чтения».

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

person VonC    schedule 04.08.2018
comment
Спасибо @VonC. В моем случае я хочу, чтобы все отправки GitHub выполнялись по SSH, а все запросы — по HTTPS. Все остальное должно использовать HTTPS для получения и отправки. Вот мой gitconfig. Когда я пытаюсь добавить [pull https://github.com], он по-прежнему использует SSH для извлечения. Другие манипуляции, похоже, просто ломают Git. Некоторое время назад я получил url/InsteadOf из другого вопроса и ответа по переполнению стека, но не смог продвинуть его до HTTPS pull и SSH push. - person jww; 05.08.2018
comment
@jww Во-первых, удалите вместо: это будет яснее - person VonC; 05.08.2018
comment
@jww во-вторых, попробуйте клонировать репо как https, затем используйте git remote set-url --push [email protected]:aUSer/aRepo в локальном клоне. - person VonC; 05.08.2018
comment
Спасибо @VonC. Можете ли вы показать мне рабочий gitconfig, который выполняет это? Мне больно работать с командной строкой git. Гораздо проще скопировать/вставить файл gitconfig. - person jww; 05.08.2018
comment
@jww Вводить команду менее рискованно. Просто скопируйте и вставьте git remote set-url --push origin [email protected]:yourUser/yourRepo.git, и все готово. - person VonC; 05.08.2018
comment
Спасибо, сделаю. Как удалить часть yourUser/yourRepo из команды? Я хочу, чтобы это применялось ко всему github.com, а не только к моим репозиториям. - person jww; 05.08.2018
comment
@jww сначала протестируйте его в своем репозитории, чтобы увидеть, работает ли он (и это даст вам работающий gitconfig). Просто отредактируйте свою команду, заменив yourUser/yourRepo своим именем пользователя GitHub и именем удаленного репозитория. - person VonC; 05.08.2018
comment
@jww Я хочу, чтобы это применялось ко всему github.com, а не только к моим репозиториям. Я отредактировал ответ альтернативой, которая применима ко всем репозиториям. - person VonC; 05.08.2018
comment
@jww Отвечает ли мое последнее редактирование (5 дней назад) вознаграждению? - person VonC; 10.08.2018
comment
@jww Итак ... это не ответило на награду, я полагаю? - person VonC; 12.08.2018
comment
Я получил ответ из списка рассылки Git. Мне нужно было решение для всего сайта, а не только для одного репо за раз. Спасибо за помощь. - person jww; 15.08.2018