회사가 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/203918https://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.