git remote origin явное указание порта

19.02.2021

Проблема банальная, но заставила немного повозиться :)

Внедряем в нашей команде систему контроля версий git, используя для этого gitlab (хочется self-hosted и интерфейс). git-сервер доступен по https протоколу, а по http отвечает межсетевой экран, но не будем вдаваться в подробности администрирования, мы программисты просто пользователи в данном случае :)

На linux системах все ровно, а вот на windows вылезла проблема прямо на самом старте, но обо всем по порядку.

Как работаем?

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

Варианты начала работы с этим репозитием при наличии уже существующего кода
Варианты начала работы с этим репозитием при наличии уже существующего кода

В обоих вариантах необходимо установить удаленный источник (remote origin) чтобы проводить с ним синхронизацию. При этом не важно в какой момент происходит первый коммит, до или после установки источника.

Какая проблема?

Повторюсь, на linux (конкретно у меня Ubuntu 18.04 LTS) все нормально, а у коллеги на Windows 10, после проведения любой из изложенных на скрине последовательстей команд, при push терминал отвечал:

•••
plaintext
fatal: Произошла ошибка при отправке запроса. fatal: Невозможно соединиться с удаленным сервером fatal: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера ip_address:80 error: unable to read askpass response from 'C:/Program Files/Git/mingw64/libexec/git-core/git-gui--askpass'

Сразу бросается в глаза тот факт, что git-клиент пытается установить соединение с git-сервером на 80 порту, на котором только http и на котором ответы межсетевого экрана, а должен по 443 порту, где https.

Проверяем источник и видим что все нормально, указан https:

•••
plaintext
$ git remote -v origin https://git.---/Byurrer/test2.git (fetch) origin https://git.---/Byurrer/test2.git (push)

Однако git-клиент вcе-равно идет не туда куда надо.

Решение проблемы

Попробовав установить источник с явным указанием 443 порта получили отказ:

•••
plaintext
git remote add origin https://git.---:443/Byurrer/test2.git fatal: внешний репозиторий origin уже существует

Тогда попробуем так:

•••
plaintext
git remote set-url origin https://git.---:443/Byurrer/test2.git

И проверяем:

•••
plaintext
$ git remote -v origin https://git.---:443/Byurrer/test2.git (fetch) origin https://git.---:443/Byurrer/test2.git (push)

Пробуем push и все нормально. Проблема решена, смело pushим!

git remote set-url позволяет установить порт даже если host адресов совпадает

Но можно было удалить источник и снова его установить:
•••
plaintext
git remote remove origin git remote add origin https://git.---:443/Byurrer/test2.git