자식 "핑": 원격 저장소가 존재하는지 확인


76

원격 저장소가 존재하는지 알고 싶습니다. 내가 생각해 낸 것은 다음과 같습니다.

git ls-remote -h "$REPO_URL" &> /dev/null

더 좋은 방법이 있습니까?


4
좋은 선택 인 것 같습니다. 참조 목록을 가져오고 형식을 지정하는 (추가로 전송되는 /dev/null) "추가 작업"의 오버 헤드는 상당히 작아야합니다.
Chris Johnsen

대답은 : 아니요, 더 좋은 방법은 없습니다.
Timo

답변:



15

--exit-code인수 를 사용 하면에 출력 보내기를 건너 뛸 수 있습니다 null. 오류가 발생한 경우에만 무언가를 반환합니다.

또한 -h인수를 사용 하여 헤드 참조 만 표시 할 수 있습니다 .

git ls-remote --exit-code -h "$REPO_URL"

-h좋은 생각입니다. 그러나 --exit-code여기서 올바른 선택은 아닙니다. 매뉴얼 페이지 에 원격 저장소에서 일치하는 참조가 없으면 상태가 "2"인 종료합니다. 즉, git ls-remote --exit-code "$REPO_URL"방금 초기화 한 빈 저장소에 대해서는 실패합니다 git init.
Jo Liss

3

다음과 같은 것을 사용하여 출력을 좁힐 수 있습니다 git ls-remote "$REPO_URL" HEAD


영원히 걸려요.
Timo

1
@Timo, 응답하지 않는 서버 또는 연결이 있거나 git 클라이언트가 손상되었을 수 있습니다. 예를 들어 네트워크 포트가 필터링됩니다. 추가 조사는 핑이 응답하지 않을 때 발생하는 것과 비슷합니다. :). 예를 들어 netcat 또는 openssl s_client 또는 tracepath 를 통해 연결이 설정되어 있는지 확인할 수 있습니다 .
ony

0

TL; DR :

git ls-remote 방법입니다. 빠른 액세스를위한 쉘 준비 기능은 다음과 같습니다.

  ## Returns errlvl 0 if $1 is a reachable git remote url 
  git-remote-url-reachable() {
      git ls-remote "$1" CHECK_GIT_REMOTE_URL_REACHABILITY >/dev/null 2>&1
  }

용법:

if git-remote-url-reachable "$url"; then
   ## code
fi

뭐하는거야?

이것은 약간의 미세 조정, bash copy-paste ready 기능 및 사용법 코드 샘플로 이전에 언급 된 모든 주석 / 솔루션의 편리한 매시 업입니다. 다음과 같은 점에 유의하십시오.

  • git 일치하지 않는 ref에서 여전히 오류 수준 0으로 종료 되므로 확인 된 참조가 존재하지 않을 때 출력을 제한합니다 . 여기에 유일한 차이점은 요청에 비해 네트워크에 전송하는 약간 덜 출력 있다는 것입니다 HEAD(그리고 심판을 요청하거나 단지 머리에 제한하지 않는 것보다 훨씬 적은),이도에 캐스팅 적은 출력 /dev/null(그러나이 어쨌든 마지막 시간은 무시할 만하다.)

  • ref를 체크 하면 존재 여부를 확실하게 알 수 있습니다. 이는 프로브 하려는 서버의 관리자에게 정중 한 태도를 취하고 그들이 무엇을 모니터링 할 때 이러한 프로브를받는 이유를 이해할 수있는 기회를 제공하는 데 도움이 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.