git clone
Clone a repository into a new directory
— Git 공식 매뉴얼(man git-clone)
오픈소스 생태계의 가장 세련된 긴지름길이자, 남의 코드를 내 손때 묻은 코드로 변환하는 첫 단추. 클론 받아도 어차피 빌드 에러 나서 바로 못 돌림(...)
1. 개요
GitHub이나 GitLab에 올려진 원격 저장소의 모든 이력과 소스 코드를 내 로컬 환경으로 그대로 복사하여 이식해오는 명령어다. 단순히 최신 코드를 다운로드하는 zip 다운로드와는 궤를 달리하며, 원격 저장소의 모든 커밋 히스토리와 브랜치 목록까지 통째로 미러링하여 내 로컬에 이식하는 강력한 파이프라인 역할을 수행한다.
2. 단순 복사와의 차이점
초보자들이 흔히 하는 실수가 바로 깃허브 웹 페이지에서 'Download ZIP'을 누르는 것이다. 이렇게 받으면 역사(History)가 없는 박제된 껍데기 코드만 얻을 뿐이다. 반면 git clone을 실행하면 해당 디렉터리 내에 원격 저장소 주소와 연동된 origin이라는 기본 원격 저장소 링크가 자동으로 걸리며, 언제든 서버와 동기화할 수 있는 완벽한 버전 관리 준비 상태가 완료된다.
3. 공포의 프로토콜 전쟁: HTTPS vs SSH
원격 주소 형식에는 크게 두 가지가 존재한다. 편리하지만 수시로 토큰이나 패스워드를 요구하여 개발자를 귀찮게 만드는 HTTPS 방식과, 최초 설정은 매우 까다롭고 열받지만 한 번 등록해두면 무부하 패스포트로 군림하는 SSH 방식이다. 회사 보안 장벽 뒤에 갇힌 가여운 개발자들은 주기적으로 SSH 공개키 등록 오류나 SSL 인증서 만료 에러(SSL certificate problem)를 마주하며 울부짖곤 한다.1
4. 실제 사용 예시
원격 저장소를 로컬에 복사할 때 사용한다. 뒤에 폴더 이름을 붙이면 저장소 이름과 다른 디렉터리명으로 받을 수 있다.
git clone https://github.com/example/project.git
git clone https://github.com/example/project.git my-app
cd my-app
git status
히스토리 전체가 필요 없고 최신 상태만 빠르게 받고 싶을 때는 얕은 클론을 쓴다.
git clone --depth 1 https://github.com/example/project.git
5. 관련 밈 및 드립
5.1. depth=1 구원투수
역사가 수만 개에 달하고 고화질 리소스가 잔뜩 박힌 거대 저장소를 무지성으로 클론받다가 하드디스크가 비명을 지르는 경우, 최신 커밋 딱 한 개만 복사해오는 git clone --depth 1 옵션을 쳐서 탈출하는 꼼수다. 과거의 업보는 무시한 채 오직 현재만 보고 살겠다는 현대 개발자들의 세속적인 모습을 반영한다.
5.2. 입사 첫날의 쾌감과 절망
새 회사에 입사해 사수에게 원격 레포 주소를 받아 git clone을 성공적으로 마쳤을 때의 희열도 잠시, npm install이나 gradle build를 갈기는 순간 터지는 수백 줄의 빨간색 의존성 에러 콘솔을 보며 첫날퇴사를 진지하게 고민하는 전통적인 밈이다.
6. 여담
- 폴더명 커스터마이징:
git clone <URL> <원하는폴더명>형태로 명령어를 치면, 굳이 저장소 이름이 아닌 내가 원하는 예쁜 이름의 디렉터리로 다운받을 수 있다. - 자궁 속까지 복사: 사실상 원격 저장소에 쌓인 모든 개발자들의 '뻘짓 역사'와 '새벽 야근 커밋'까지 전부 다 긁어오는 무서운 명령어다.
- 서버 부하의 원인: 가끔 퇴근 전 수십 개의 무거운 레포를 동시에 멀티스레드로 클론 받는 빌런들 때문에 사내 깃랩 서버가 뻗는 훈훈한 광경이 연출된다.