인생은 여행

git 'remote-http' is not a git command 해결 본문

Troubleshooting

git 'remote-http' is not a git command 해결

산떠 버하둘 2021. 1. 6. 07:53

Jenkins와 gitlab을 연동 시험을 하는 중 아래와 같은 오류를 만났다.

 

git 'remote-http' is not a git command

 

git 저장소 프로토콜을 'git'이나 'ssh'가 아닌 'http'로 지정하는 경우에만 발생하였다. git은 status, pull, push 같은 많은 하위 명령어와 함께 작동하는데, 이 하위 명령어가 오는 부분에 알 수 없는 명령어가 오면 위와 같은 오류가 발생한다.

결론부터 말하자면, 'remote-http'라는 git 하위 명령어(sub command)가 설치되지 않았거나 git plugin이 http 프로토콜에 대하여 정상 작동할 수 없어서 발생한 오류이다. 그리고 그 근본적인 이유는 Jenkins가 설치된 Linux 서버의 curl 명령어(정확하게는 libcurl 라이브러리)가 오래된 버전이어서 생긴 문제였다.

해결은, curl을 재설치하고 git도 재설치하였다. 설치 방법은 각자의 환경에 맞추어 하면 되겠지만 해당 서버는 인터넷 연결이 되지 않아서  소스를 다운 받아서 설치하였다. 모두 최신 버전으로 받았고 이상 없이 잘 동작하였다.

소스 다운로드 위치

  - curl: curl.se/download.html

  - git: mirrors.edge.kernel.org/pub/software/scm/git/

현재(2021년 1월) curl은 '7.74', git은 '2.30.0'이 최신 버전이다.

 

소스기반 리눅스 명령어 설치

꼭 리눅스로 한정되는 이야기는 아니지만 일반적으로 소스 기반으로 프로그램을 설치하는 경우 다음의 절차를 기본으로 한다.

./configure
make
make install

위와 같이하면 기본 설정으로 설치를 진행하게 되므로 설정을 변경하고자 한다면 'configure' 스크립트의 파라미터를 이용하여 조정하여야 한다.

 

설치 유의점

설치시 유의할 점이 몇 가지 있다.

 

먼저 각 명령어의 현재 버전을 잘 확인하자.

 

curl -V

git --version

 

특히 curl 설치할 때 주의하여야 하는데, curl이 linux 기본 명령어이다 보니 설치 위치에 신경써야하고 포함된 동적 라이브러리 libcurl이 캐시되어 있는 경우가 있어서 설치 후 curl 명령어 자체가 정상 작동하지 않을 수 있다.

아래는 사용중인 맥북의 예를 캡처한 것인데 여기서 libcurl의 버전을 잘 확인하고 설치 전과 후를 비교해 봐야 한다.

> curl -V
curl 7.64.1 (x86_64-apple-darwin20.0) libcurl/7.64.1 (SecureTransport) LibreSSL/2.8.3 zlib/1.2.11 nghttp2/1.41.0
Release-Date: 2019-03-27
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM NTLM_WB SPNEGO SSL UnixSockets

설치 위치는 '/usr/local'이 기본이며, '/usr'로 변경하고 싶다면 `./configure --prefix=/usr`로 옵션을 변경한다. 그리고 마지막 설치하기 위해서는 root 계정이거나 sudo 권한이 있어야 할 것이다. `sudo make install`

 

만약 libcurl이 정상 업데이트되지 않으면 'ldconfig' 명령을 이용하여 cache를 갱신한다.

 

 

 

 

Comments