회사가 git : // 프로토콜을 차단했습니다. 어떻게 해결할 수 있습니까?


188

같은 것을 시도 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 : // 프로토콜을 사용하려고하는데 실패합니다. 해당 명령의 작동 방식을 변경하는 방법이 있습니까?


SSH 액세스 권한이 있습니까? 아니면 그냥 HTTP?
— Pablo Santa Cruz

56
자식 질문을 끝내려는 사람들은 무엇입니까? FAQ에 따르면 SO의 범위에는 "프로그래머가 일반적으로 사용하는 소프트웨어 도구"가 포함됩니다. 여기에는 6 천 개가 넘는 자식 질문이 있습니다. 그들은 여기에 속합니다.
— Cascabel

9
git : // URL이 git config --global url.https://.insteadOf git://
— 보일

답변:


426

이것이 방화벽에서 git : protocol port (9418)를 차단하는 문제인 경우, 좀 더 지속적으로 변경해야하므로 모든 git repo에 대해 다른 게시물에서 제안한 명령을 실행해야합니다.

아래 솔루션은 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://에를https://

이 명령으로 어떤 변화가 있었습니까?

다음을 사용하여 글로벌 구성을 살펴보십시오.

git config --list

출력에 다음 줄이 표시됩니다.

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

~/.gitconfig다음 두 줄이 추가 된 위치를 살펴보면 파일이 어떻게 보이는지 확인할 수 있습니다 .

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

더 많은 제어를 원하십니까?

대체에보다 완전한 / 특정 URL을 사용하십시오. 예를 들어, GitHub URL 만 git : // 대신 https : //를 사용하도록하려면 다음과 같이 사용할 수 있습니다.

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

다른 대체를 사용하여이 명령을 여러 번 실행할 수 있습니다. 그러나 URL이 여러 개의 대체 항목과 일치하는 경우 가장 긴 일치 항목이 "우승"합니다. URL 당 한 번만 교체됩니다.

Sysadmins에 대한 시스템 전체 변경 사항

Linux Sysadmin이고 사용자가 위의 어려움을 겪지 않게하려면 시스템 전체의 git 구성을 빠르게 변경할 수 있습니다.

다음 내용을 간단히 편집하거나 추가하면 /etc/gitconfig사용자는 위의 내용에 대해 걱정할 필요가 없습니다.

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

9
훌륭한 단순성!
— 랜스 헌트

잘 작동합니다! 더 이상 검색 및 교체 할 필요가 없습니다. 빌드 스크립트는 이제 작동합니다. 이 답변은 많은 시간을 절약했습니다. 감사!
— 제레미 벨

7
변환 할 URL을 조금 더 제어하기 위해 URL의 일부도 지정할 수 있습니다. 예를 들어 SSH가 아닌 git repos를 호스팅하는 개인 내부 서버 'myserver.lan.example.com'이 있지만 HTTPS는 아닙니다. 따라서 편리한 키 인증을 이용하려면 SSH 를 사용해야합니다. 또한 Github의 저장소를 사용하지만 회사 방화벽은 SSH를 Github으로 차단합니다. gitlab을 손상시킬 수 있으므로 'git : //'의 모든 인스턴스를 'https : //'로 간단히 바꾸고 싶지 않습니다. 해결책은 git config --global url."https://github".insteadOf git://github입니다.
— clayzermk17

2
cygwin 내부에서 git을 실행 중이며이 작업을 수행 할 수있는 유일한 방법은 'Sysadmins에 대한 시스템 전체 변경 사항'을 수행하고 'url.https : //.insteadof=git : //'변경 사항을 추가하는 것입니다. 'C : \ Program Files (x86) \ Git \ etc \ gitconfig'파일. 힌트 주셔서 감사합니다!
— Craig

3
이 변경 사항을 취소하려면 다음을 사용하십시오.git config --global --unset url."https://".insteadOf
— djskinner

29

Github은 http (s) 액세스도 제공하므로 회사에서 차단할 가능성이 훨씬 낮습니다. 이를 사용하도록 서브 모듈에 지시하려면 다음을 수행하십시오.

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

이것이 실제로 init와 update가 별도의 명령 인 이유입니다. 초기화하고 위치를 사용자 정의한 다음 업데이트 할 수 있습니다. update --initURL을 사용자 정의 할 필요가없는 경우에 대한 바로 가기입니다.

이 문제를 겪는 다른 사람은 물론 ssh URL (회사가 git : //를 차단하지만 ssh는 차단하지 않는 경우)을 사용할 수 있지만이 경우 OP에는 아마도 원격 저장소에 대한 SSH 액세스 권한이 없습니다.


이 소리는 아마도 저에게 효과적 일 것입니다.하지만 각각 개별적으로 처리해야 할 것 같습니다. 그것이 중요하다면 github.com/ajaxorg/cloud9을 구체적으로 하고 있었습니다 .
— Robert

4
@Robert : 많이있는 경우 구성 파일을 직접 편집하고 검색하고 바꿀 수 있습니다 : sed -i 's@git://github@https://github@' .git/config.
— Cascabel

흠, 어떤 이유로 그들은 파일에 http : //라고 말하지만 명령은 여전히 ​​git : //를 시도합니다
— Robert

1
OP에 설명 된 것과 동일한 문제가 있지만이 솔루션을 사용할 때 여전히 실패하지만 약간 다른 오류가 있습니다. "오류 : https : //에 액세스하는 중 : 치명적 : HTTP 요청이 실패했습니다"라는 메시지가 표시됩니다. 호스트가 무언가를 차단하고 있습니까? 내 다른 서브 모듈은 잘 업데이트되어 하나만 문제가 있습니다.
— Jo Sprague

13

git config를 다루지 않는 또 다른 옵션은 일반 22 포트 대신 포트 443을 사용하도록 ssh 설정을 변경하는 것입니다.

참조 : HTTPS 포트를 통한 SSH 사용

그 기사에서 :

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

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

그 후, 나는 Github에 성공적으로 자식 푸시를 할 수있었습니다. 집에서 ssh 설정을 원하는 방식으로 되돌릴 수 있습니다.


7

나는 또한 같은 문제가 잠시 동안 있었다. 그런 다음 제안 된 명령을 사용하여 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

문제 https://대신 사용하여 원격 URL을 설정하면 git@git.com문제가 해결되었습니다.


1
비슷한 문제가 발생했습니다. 전역 설정은 앞으로 복제 된 저장소에만 영향을 미치며 소급 변경되지 않습니다.
— Taylor Edmiston

2

위의 Nathan의 답변을 확장하여 회사 방화벽이 https를 방해하는 경우 ssh 프로토콜을 사용해 볼 수도 있습니다. 필자의 경우 방화벽은 git 프로토콜을 차단하고 https 용 SSL 인증서를 다시 발행했으며 strict-ssl 옵션이 꺼져 있어도 바우어가 깨졌습니다. ssh에 대해 비슷한 URL 다시 쓰기를 수행하고 github에 설명 된대로 ssh 키 / 쌍 을 만들 수 있습니다 .

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

또한 git 설치를 위해 ssh-agent 를 켜야합니다 .


1

노드 서버의 GIT 주소가 변경되었으므로 지금 입력해야합니다.

자식 복제 https://github.com/joyent/node

행운을 빕니다


6
이 질문은 위의 URL이 유효한 2 월부터있었습니다.
— Robert

@calccrypto 링크는 코드에 태그가없는 명령의 일부이며 정보에 대한 링크가 아닙니다.
— Mike Precup

0

소개

여기에 내 접근 방식을 추가 할 것입니다 ( https를 지원하는 공개적으로 액세스 가능한 git 저장소가있는 경우 필요하지 않습니다 ).

회사 내부에서만 git 저장소에 액세스 할 수있는 회사에서 일합니다. 그러나 나는 또한 집에서 일합니다.

집에서 회사 저장소로 어떻게 푸시합니까?

내 Google 드라이브에 폴더가있는 저장소를 만들었습니다. git 및 https를 제외하고 리포지토리를 경로로 포함 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

따라서 원점으로 이동하는 대신 "gDrive"로 이동합니다. 이로 인해 폴더가 내 홈 워크 스테이션에서 Google 드라이브로 동기화 된 다음 회사 컴퓨터가 변경 사항을 가져옵니다. 또한 때때로 ".git"디렉토리의 파일이 동기화되지 않기 때문에 폴더 이름을 "trunk"에서 "trunk2"로 임시 변경합니다. 이렇게하면 집과 직장 컴퓨터가 모두 Google 드라이브와 100 % 동기화됩니다.

그런 다음 checkpoint-vpn remote (또는 teamviewer)를 통해 업무용 컴퓨터에 로그온 한 다음 업데이트를 업무용 git 저장소로 푸시합니다.

또한 프로세스는 차단 된 회사 외부의 git 저장소로 푸시하기 위해 작동합니다.

  1. 워크 스테이션 git repo에서 Google 드라이브의 폴더로 푸시하십시오.
  2. gDrive에서 프로젝트 디렉토리의 이름을 임시로 바꾸어 강제로 100 % 동기화합니다.
  3. 일종의 리모콘을 통해 가정용 컴퓨터에 액세스하고 변경 사항을 적용하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.