개요
최근에 git clone 시에 지속적으로 에러가 발생하여 무척 성가셨습니다. 구글 검색을 통해서 시도해본 솔루션들이 연달아 실패하곤 했지요. 대부분의 솔루션들은 git config 명령을 통해서 설정해주는 것들이었는데, 그렇게 간단하게 해결되는 문제가 아니었습니다. 만약 그렇게 간단하게 해결될 문제라면 애초부터 이 글을 쓰지도 않았을 것입니다.
결론부터 말씀드리면, 2가지 방법이 있습니다. 임시 대책은 shallow clone을 통해서 clone을 한 이후에 전체 레포지토리를 받아오는 방법이고, 근본 대책은 최신 버전의 git을 컴파일해서 설치하는 방법입니다.
본 페이지에서 다루는 내용
본 페이지에서는 아래의 내용들을 다룹니다.
- git config를 이용한 문제 해결
- git clone --depth=1 명령을 통한 회피 방안 (임시대책)
- 최신 버전의 curl을 컴파일하여 설치하는 방법 (영구대책)
문제의 현상
최근 Jenkins에서 build 시에 지속적인 fail이 발생하였습니다. 빌드 로그를 살펴보니 git clone 시에 아래와 같은 메시지가 표시되면서 clone에 지속적으로 실패하더군요.
RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated. |
Jenkins 서버가 아닌 제 PC에서 git clone 명령을 실행해봤는데, 동일하게 git clone 시에 위와 같은 에러 메시지가 나오면서 clone이 안되더군요. 저뿐만 아니라, 같은 프로젝트를 진행하는 다른 동료분들에게도 동일한 문제가 지속적으로 발생하고 있던 상황입니다.
제가 사용하는 운영체제는 Ubuntu 20.04.3이었고, git 버전은 2.25.1이었습니다.
운영체제 버전 | Ubuntu 20.04.3 |
git 버전 | 2.25.1 |
git config 명령을 통한 설정 (모두 실패)
프로젝트 동료분들과 해결 방법을 구글링 해보았으나 모두 실패했습니다. 아래는 git config --add 명령으로 추가해봤던 설정들입니다. 이 설정으로도 문제가 해결되지 않을 경우 최신 버전의 git을 다운로드하여서 재설치해야 합니다.
$ cat ~/.gitconfig [http] postBuffer = 524288000 sslverify = false [https] postBuffer = 524288000 [core] compression = -1 |
다들 잘 아시겠지만 .gitconfig 파일을 위와 같이 직접 수정하셔도 되겠지만, git add 명령을 통해서 .gitconfig 파일에 설정을 추가하실 수 있습니다.
$ git add config --global --add http.postBuffer 524288000 $ git add config --global --add http.sslverify false $ git add config --global --add https.postBuffer 524288000 $ git add config --global --add core.compression -1 |
git clone --depth 옵션을 이용한 workaround 방법 (임시 대책)
git clone --depth 옵션을 이용하면 git clone에는 성공할 수 있었지만 이 방법은 근본 문제 해결 방법이 아닙니다. 예를 들어, 명령을 통해서 clone을 한다고 하더라도 이후에 git fetch --all 명령 또는 git remote update 등의 명령에서 여전히 문제가 발생할 수 있습니다.
git clone --depth=1 http://abc.def.ghi |
이렇게 clone 하는 방법을 shallow clone이라고 합니다. commit history 없이 최신 소스 코드만 받아오면 속도도 빠르고 용량도 덜 차지하기 때문에 퍼포먼스를 위해서 많이 사용하곤 합니다. 비록 git fetch -all 또는 git remote update 등의 명령에서 또 다시 RPC failed가 발생한다고 하더라도 다시 시도하면 정상적으로 업데이트가 가능하더군요.
$ git fetch --unshallow
shallow clone 이후에 완전한 저장소 정보를 가려오려면 위와 같이 --unshallow 옵션을 달아서 git fetch 명령을 수행하면 됩니다.
이 과정에서 git checkout 시에 "error: pathspec 'branch_name' did not match any file(s) known to git" 에러가 발생하며 checkout이 안 되는 경우는 아래의 글을 참조하시기 바랍니다.
최신 버전의 git 소스코드를 다운로드하여서 컴파일 후 설치 (근본 대책)
저의 경우는 최신 버전의 git 소스(2.29.3)를 다운로드한 후에 컴파일하여 설치했더니 git clone 시에 발생한 문제를 깔끔하게 해결할 수 있었습니다. 그럼 최신 버전의 git을 설치하는 방법에 대해서 설명드리겠습니다.
1. 웹브라우저로 아래 경로에 접속하여 다운로드할 git 소스 버전을 선택합니다.
http://mirrors.kernel.org/pub/software/scm/git/
2. curl 명령을 통해서 다운로드합니다.
$ curl -o git-2.29.3.tar.gz http://mirrors.kernel.org/pub/software/scm/git/git-2.29.3.tar.gz
3. 압축을 해제합니다.
$ tar zxvf git-2.29.3.tar.gz
4. 빌드를 위한 패키지를 설치합니다.
$ sudo apt-get install dh-autoreconf libcurl4-gnutls-dev \
libexpat1-dev gettext libz-dev libssl-dev asciidoc xmlto \
docbook2x install-info
5. 컴파일 및 설치를 진행합니다.
$ cd git-2.29.3
$ make configure
$ ./configure --prefix=/usr
$ make all doc info
$ sudo make install install-doc install-html install-info
6. git --version 명령을 통해서 새로 설치된 git의 버전을 확인합니다.
$ git --version
새로운 git 버전이 제대로 설치되어 있는지 확인합니다. git clone을 해봤더니 RPC에러 없이 정상적으로 잘 clone 되는 것을 확인하였습니다. 앓던 이가 빠진 것 같은 느낌이네요.
Jenkins에서 git clone 시에 문제 발생할 경우
만약 Jenkins에서 git clone 도중에 이 에러가 발생한다면 shallow clone을 설정하면 됩니다. 관련 내용은 아래 페이지를 참조하시기 바랍니다.
출처
이상입니다.
'Study > Ubuntu 공부' 카테고리의 다른 글
[ubuntu] 터미널 창에서 백스페이스 누를 때 거슬리는 비프음 끄는 방법 (0) | 2021.10.29 |
---|---|
[ubuntu] ccminer 설치시 발생하는 오류 해결 방법 (0) | 2021.10.27 |
[Ubuntu] 20.04.3에서 한글 입력이 안 되는 경우 조치 방법 (IBus 말고 fcitx로 설정) (0) | 2021.09.14 |
[Ubuntu] Linux 업그레이드 이후 키보드와 마우스 잠김 현상 해결 방법 (1) | 2021.08.13 |
[Bash Shell] set -e 옵션과 set -x 옵션 사용 방법 (명령 실패시 스크립트 자동 종료시키는 방법) (3) | 2021.03.21 |