git: / / протокол заблокирован компанией, как я могу обойти это?

попытка что-то вроде 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 ответов


если это проблема с вашим брандмауэром, блокирующим порт git: protocol (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:// to 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 Sysadmin, и вы не хотите, чтобы ваши пользователи должны пройти через вышеуказанные боли, вы можете сделать быстрое общесистемное изменение конфигурации git.

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

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

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

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

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

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


другой вариант, который не включает в себя прикосновение 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 нажать на Github. Дома вы можете изменить конфигурацию ssh на то, как это было, если хотите.


у меня тоже была такая же проблема на некоторое время. Затем я попытался изменить конфигурацию 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 проблема была решена для меня.


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

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

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


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

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

удачи


введение

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

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

как я могу нажать на репозиторий компании из дома?

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

enter image description here

Итак, вместо того, чтобы нажимать на origin, я нажимаю на "gDrive". Это приводит к синхронизации папки с моей домашней рабочей станции на google Диск, а затем мой рабочий компьютер извлекает изменения. Кроме того, так как иногда файлы в ".каталог git" не синхронизируется, я временно переименовываю папку, например, из " trunk "в"trunk2". Это заставляет домашний и рабочий компьютеры на 100% синхронизироваться с google Диском.

I затем войдите в мой рабочий компьютер через checkpoint-vpn remote (или teamviewer) и нажмите мои обновления в репозиторий work git.

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

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