git: // протокол заблокирован компанией, как мне обойти это? - PullRequest
184 голосов
/ 03 февраля 2011

Попытка что-то вроде git clone git://github.com/ry/node.git не будет работать, это приведет к:

Initialized empty Git repository in /home/robert/node/.git/
github.com[0: 207.97.227.239]: errno=Connection timed out
fatal: unable to connect a socket (Connection timed out)

Однако клонирование по HTTP работает нормально.Пока что я понял, что это проблема с протоколом, но я пытаюсь установить cloud9, для которого требуется команда

git submodule update --init --recursive

, которая пытается использовать git:// протокол и сбой.Есть ли способ изменить, как эта команда будет работать или что-то в этом роде?

Ответы [ 7 ]

421 голосов
/ 24 мая 2012

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

Приведенное ниже решение также работает только для подмодулей, которые также могут использовать протокол git:

Поскольку сообщение git не указывает сразу на порт 9418, блокирующий брандмауэр, давайте попробуем диагностироватьэто актуальная проблема.

Диагностика проблемы

Ссылки: https://superuser.com/q/621870/203918 и https://unix.stackexchange.com/q/11756/57414

Существует несколько инструментов, которые мы можем использовать, чтобы определить,брандмауэр вызывает нашу проблему - используйте тот, который установлен в вашей системе.

# Using nmap
# A state of "filtered" against port 9418 (git) means
#   that traffic is being filtered by a firewall
$ nmap github.com -p http,git

Starting Nmap 5.21 ( http://nmap.org ) at 2015-01-21 10:55 ACDT
Nmap scan report for github.com (192.30.252.131)
Host is up (0.24s latency).
PORT     STATE    SERVICE
80/tcp   open     http
9418/tcp filtered git

# Using Netcat:
# Returns 0 if the git protocol port IS NOT blocked
# Returns 1 if the git protocol port IS blocked
$ nc github.com 9418 < /dev/null; echo $?
1

# Using CURL
# Returns an exit code of (7) if the git protocol port IS blocked
# Returns no output if the git protocol port IS NOT blocked
$ curl  http://github.com:9418
curl: (7) couldn't connect to host

ОК, теперь мы определили, что наш git-порт заблокирован брандмауэром, что мы можем с этим сделать?Читайте дальше:)

Основная перезапись URL

Git предоставляет способ перезаписи URL с использованием git config.Просто введите следующую команду:

git config --global url."https://".insteadOf git://

Теперь, как по волшебству, все команды git будут выполнять замену git:// на https://

Какие изменения внесла эта команда?

Посмотрите на вашу глобальную конфигурацию, используя:

git config --list

Вы увидите следующую строку в выводе:

url.https://.insteadof=git://

Вы можете увидеть, как это выглядитв файле, взглянув на ~/.gitconfig, где вы должны увидеть, что были добавлены следующие две строки:

[url "https://"]
    insteadOf = git://

Хотите больше контроля?

Просто используйте более полный /конкретный URL в замене.Например, чтобы в URL-адресах GitHub использовался https: // вместо git: //, вы можете использовать что-то вроде:

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

Вы можете запустить эту команду несколько раз, используя различные замены.Однако в случае совпадения URL-адреса с несколькими заменами самое длинное совпадение «выигрывает».Для каждого URL будет сделана только одна замена.

Общесистемные изменения для системных администраторов

Если вы являетесь системным администратором Linux и не хотите, чтобы ваши пользователи проходили через вышеуказанноеВы можете быстро изменить общесистемную конфигурацию git.

Просто отредактируйте или добавьте следующее содержимое к /etc/gitconfig, и ваши пользователи не должны беспокоиться ни о чем из перечисленного:

[url "https://"]
    insteadOf = git://
29 голосов
/ 03 февраля 2011

Github также предоставляет доступ к http (s), который с меньшей вероятностью будет заблокирован вашей компанией. Чтобы указать субмодулю использовать это, вы можете сделать это:

git submodule init
git config submodule.<name>.url https://github.com/...
git submodule update

Именно поэтому init и update являются отдельными командами - вы можете инициализировать, настраивать местоположение, а затем обновлять. update --init - это просто ярлык, когда вам не нужно настраивать URL-адреса.

Для всех, кто сталкивается с этим, вы можете, конечно, также использовать ssh URL (если ваша компания блокирует git: // но не ssh), но в этом случае OP, предположительно, не имеет доступа SSH к удаленному Сделки рЕПО.

11 голосов
/ 02 апреля 2015

Другой вариант, который не затрагивает касание git config, - это изменить настройки ssh для использования порта 443 вместо обычного 22 порта.

Ссылка: Использование SSH через порт HTTPS

Из этой статьи:

edit the file at ~/.ssh/config, and add this section:

Host github.com
   Hostname ssh.github.com   
   Port 443

Впоследствии я смог успешно выполнить команду git push to Github,Дома вы можете изменить конфигурацию ssh обратно так, как было, если хотите.

6 голосов
/ 01 сентября 2014

У меня тоже была такая же проблема некоторое время. Затем я попытался изменить конфигурацию git, используя предложенную команду:

git config --global url."https://".insteadOf git://

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

Что наконец-то решило мою проблему, так это то, что я снова сбросил удаленный URL моего репозитория с помощью следующей команды:

git remote set-url origin https://github.com/<my_user_name>/<my_repo_name>.git

, который ранее был таким:

git remote set-url origin git@github.com:<my_user_name>/<my_repo_name>.git

После установки удаленного URL с помощью https:// вместо git@git.com проблема была решена для меня.

2 голосов
/ 06 мая 2014

Расширяя ответ Натана выше, вы также можете попробовать протокол ssh, если ваш корпоративный брандмауэр мешает https.В моем случае брандмауэр блокировал протокол git, повторно выдавал ssl-сертификаты для https, и это было для меня бесполезно, даже с отключенной опцией strict-ssl.Вы можете выполнить аналогичную перезапись URL для ssh и создать ключ / пару ssh , как описано на github .

 git config --global url."ssh://git@github.com".insteadOf git://github.com

Вам также необходимо включить ssh-agent для установки git.

1 голос
/ 27 июня 2011

потому что изменился адрес GIT для сервера узлов, вы должны ввести сейчас:

git clone https://github.com/joyent/node

удачи

0 голосов
/ 08 июня 2016

Введение

Я добавлю сюда свой собственный подход (, который не требуется, если у вас есть общедоступный репозиторий git, поддерживающий https ).

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

Как мне отправить хранилище компании из дома?

Я создал хранилище с папкой на моем диске Google. За исключением git и https, вы можете включать репозитории в качестве путей.

enter image description here

Итак, вместо нажатия на начало я нажимаю на «gDrive». Это приводит к синхронизации папки с моей домашней рабочей станции на диске Google, а затем мой рабочий компьютер извлекает изменения. Кроме того, поскольку иногда файлы в каталоге «.git» не синхронизируются, я временно переименовываю папку, например, из. "багажник" до "багажник2". Это приводит к 100% синхронизации домашнего и рабочего компьютеров с Google Drive.

Затем я подключаюсь к своему рабочему компьютеру через удаленную контрольную точку-vpn (или teamviewer) и помещаю свои обновления в репозиторий work git.

Кроме того, процесс будет работать наоборот для отправки в репозиторий git за пределами заблокированной компании.

  1. Нажмите с рабочей станции git repo в папку на Google Диске.
  2. Принудительная 100% синхронизация путем временного переименования каталога проекта в gDrive.
  3. Получите доступ к домашнему компьютеру с помощью пульта дистанционного управления и нажмите изменения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...