git clone 사용법 | github ssh 설정 방법, --branch 옵션, --depth 옵션
이번 포스팅은 git clone
명령어 사용법을 다룹니다. ssh를 이용한 clone, --branch
옵션, --depth
옵션 등에 대해서 쉽게 정리해보겠습니다.
1. git clone 사용법
git clone
명령어는 원격 리포지토리의 모든 내용을 복사해서 로컬 환경에 복사하는 명령어입니다. 우리는 복사한 리포지토리에 새로운 변경사항을 커밋하거나 기타 작업들을 수행한 후, 다시 원격 리포지토리에 push 할 수 있습니다.
clone은 주로 Github이나 Gitlab, Bitbucket 등의 Git 호스팅 서비스에서 이루어집니다. 사용 방법은 간단합니다. 원격 리포지토리의 주소를 가지고 아래 명령어를 입력해줍니다.
git remote 포스트에서 설명했듯이, Git은 다양한 통신 프로토콜을 지원합니다. 가장 대중적으로 사용하는 http(s) 프로토콜을 예시로 들어보겠습니다.
$ git clone https://github.com/user/repo.git
또한, git init 포스트에서 --bare
옵션 설명할 때 언급했듯이, 원격 리포지토리 주소가 .git
으로 끝난다는 점도 확인할 수 있습니다.
명령어를 입력하면 현재 디렉토리에 리포지토리 이름과 같은 폴더가 생성되고 그 안에 리포지토리에 속한 파일들이 다운로드됩니다. 다음은 세계에서 가장 많은 star 개수를 보유하고 있는 Github repo 주소로 git clone
명령어를 실행한 결과입니다.
원격 repo 이름과 동일한 free-programming-books
디렉토리에 repo의 모든 내용이 복사된 것을 확인할 수 있습니다. 만약 다른 이름을 가진 디렉토리에 저장하려면, 다음과 같이 주소 다음에 원하는 디렉토리명을 적어주면 됩니다.
$ git clone https://github.com/user/repo.git directory-name
2. ssh 를 이용한 clone
SSH는 공개키-개인키 쌍을 통해 암호화를 보장하는 통신 프로토콜입니다. 주로 원격 호스트에 접속할 때 사용하는 프로토콜로, Git에서 사용하면 https 보다 간편한 인증, 빠른 응답 속도의 이점을 누릴 수 있습니다.
Git이 지원하는 통신 프로토콜에 대해서는 이 포스트를 참고하세요.
다만, 어떠한 설정 없이도 사용할 수 있는 https 프로토콜에 비해서, ssh를 이용하려면 약간의 초기 설정이 필요합니다. 어렵지 않으니 Github에서 ssh를 사용하는 방법을 단계별로 진행해보겠습니다.
2.1. 새로운 ssh 키 생성
우선 새로운 ssh 키를 생성해야 하는데, 그 전에 이미 존재하는 ssh 키가 있는지 살펴봅니다. 다음과 같이 ~/.ssh
디렉토리를 확인합니다.
$ ls -al ~/.ssh
출력되는 파일 중, id_rsa.pub
, id_ecdsa.pub
, id_ed26619.pub
이렇게 3가지 파일을 Github에서 사용할 수 있습니다. 해당하는 파일이 존재하지 않는다면 아래 명령어로 새 키 파일을 생성합니다.
$ ssh-keygen -t ed25519 -C "Github 이메일 주소"
실행 결과는 다음과 같습니다.
명령어를 입력하면 3가지 프롬프트가 나옵니다.
가장 처음에는 파일 저장 위치를 물어보는데, 입력값 없이 엔터를 치면 기본값 위치에 저장됩니다. 그 다음은 ssh의 passphrase 를 입력하는 프롬프트입니다. passphrase는 내 ssh key 파일을 누군가 손에 넣더라도 맘대로 사용할 수 없도록 설정하는 비밀번호입니다. 그 다음 프롬프트에서 한번 더 입력합니다.
2.2. Github 계정에 ssh 키 등록
이렇게 생성한 ssh 공개키를 Github에 등록해주어야 합니다. Github에 로그인한 후, 오른쪽 상단 프로필을 클릭해 메뉴를 엽니다. 이중 Settings 를 클릭합니다.
설정 화면에서 Access 메뉴 안의 SSH and GPG keys 로 들어갑니다.
New SSH key 버튼을 클릭해서 등록 화면에 들어갑니다. ssh 키 파일 내용은 아래 명령어로 클립보드에 복사할 수 있습니다.
$ pbcopy < ~/.ssh/id_ed25519.pub
혹시 ed25519 알고리즘을 사용하지 않았다면 해당하는 파일명으로 바꿔서 입력해주세요. 그리고나서 클립보드에 복사한 키를 아래 Key 부분에 붙여넣고 초록색 버튼을 클릭해 새 ssh 키를 등록합니다. 이 때, 계정 재확인을 위한 로그인이 필요합니다.
등록을 완료한 후, 정상적으로 등록되었는지 확인하기 위해 아래 명령어를 입력합니다.
$ ssh -T git@github.com
이 때, 내 ssh 키 파일 알고리즘에 따라, fingerprint 가 일치하는지 확인한 후에 접속을 시도합니다. fingerprint 는 GitHub's SSH key fingerprints 페이지 (opens in a new tab)에서 확인할 수 있습니다.
fingerprint를 확인한 후, yes, 그리고 passphrase 까지 입력하니 정상적으로 접속이 되는 것을 확인할 수 있었습니다.
`2.3. ssh 로 git clone
이제 초기 설정이 끝났습니다. 다음과 같이, git clone
명령어와 원격 리포지토리의 ssh 주소를 입력하여 클론을 진행합니다.
$ git clone git@github.com:<username>/<remote-repo-name>
다음은 실행 결과입니다.
추가로, 매번 passphrase를 입력하지 않도록 설정하는 방법들이 존재합니다. 이 부분은 다른 포스팅에서 다루겠습니다.
3. --branch 옵션으로 특정 브랜치 clone
git clone
명령어는 기본적으로 원격 repo 의 기본 브랜치를 clone 합니다. 흔히 master
혹은 main
브랜치입니다.
다른 브랜치를 clone 하고 싶을 때는 일단 기본 브랜치 clone 완료 후, 다른 브랜치를 pull 하는 방법과 clone 명령어에 --branch
옵션을 사용하는 방법이 있습니다.
원격 repo에서 둘 이상의 브랜치에 접근해야 할 때는 전자의 방법을 사용해야 합니다. --branch
옵션으로 clone하면 다른 브랜치에 접근할 수 없기 때문입니다.
사용방법은 다음과 같습니다.
$ git clone --branch <branch-name> <repo-address>
실제로 사용해보겠습니다.
이렇게 원하는 브랜치만 clone 할 수 있습니다.
4. --depth 옵션으로 원하는 만큼의 히스토리만 shallow clone
프로젝트의 크기가 점점 커질수록, Git 리포지토리가 저장하는 데이터 양도 함께 증가합니다. 커밋 히스토리도 상당한 길이일 것입니다. 이럴 때, 경우에 따라서는 이 리포지토리의 첫 시작부터 현재까지의 모든 데이터를 받아오는 것이 비효율적일 수도 있습니다.
--depth
옵션은 이러한 경우에 사용합니다. 이 옵션을 통해, 우리는 마지막 커밋을 기준으로 로컬 환경에 복사할 커밋의 수를 지정할 수 있습니다.
예를 들어, 1 개의 depth만 지정하면 가장 마지막 커밋에 대한 데이터만 가져오는 것입니다.
명령어는 다음과 같습니다.
$ git clone --depth <depth> <repo-address>
실제 실행 결과를 보겠습니다.
위 화면을 보면, depth 옵션값을 설정해서 clone했기 때문에, git log
명령어에 마지막 커밋만 출력됩니다.
5. 마치며
git clone
명령어는 내 프로젝트 뿐 아니라 수많은 타 리포지토리에 접근할 때 필수적인 명령어입니다.
이번 포스팅을 통해 git clone
명령어에 대해 더 많은 부분을 이해하고 사용할 수 있게 되었길 바랍니다.