서버(원격) 저장소에서 내려받기
서버 저장소의 내용을 내려받는 방법은 크게 3가지가 있으며, 그 방법과 차이를 간략히 얘기하면 다음과 같습니다.
- Clone (클론) - 서버(원격) 저장소의 내용을 전부 그대로 로컬로 복제.
- Pull (풀) - 로컬 저장소와 다른 사항에 대해서만 내려받아 병합(merge)까지 수행함.
- Fetch (패치) - 로컬 저장소와 다른 사항에 대해서만 내려받고 병합(merge)은 하지 않음.
■ Clone
먼저, 서버(원격) 저장소의 내용을 전부 그대로 로컬로 복제할 수 있는 명령어로 clone이 있습니다.
앞서 서버(GitHub)에 저장소만 만들어 두고, push 명령어로 로컬 저장소의 내용을 처음으로 서버(원격) 저장소로 전송하는 것이었다면, clone은 반대로 로컬에 아무것도 없는 상태에서 서버 저장소의 내용을 그대로 복제해서 로컬 저장소를 구성할 수 있습니다.
사용법은 다음과 같습니다.
# 서버 저장소의 내용을 그대로 복제해서 로컬 저장소를 구성
$ git clone <옵션> <서버 저장소 URL> <디렉토리>
<옵션>과 <디렉터리>는 생략할 수 있습니다.
<디렉터리>는 내려받을 디렉터리 이름을 지정하는 것입니다.
<디렉터리>를 입력하지 않으면 서버 저장소의 이름을 디렉터리로 해서 로컬에 내려받게 됩니다.
예를 들어, 서버 저장소 이름이 remoterepo라고 했을 때
$ git clone <서버 저장소 URL> 명령을 실행하면 로컬에 remoterepo 디렉터리를 만들고 그 아래에 저장소 파일 및 Git이력 등을 모두 내려받습니다.
$ git clone <서버 저장소 URL> test라고 하면, test라는 폴더를 만들고 그 아래에 서버 저장소의 내용을 모두 내려받게 됩니다.
서버(원격) 저장소를 로컬에 clone 하기 위해 우리가 제일 먼저 해야 할 것은 clone 받을 폴더를 만드는 것입니다.
폴더를 만들 때는 윈도우 탐색기에서 폴더를 만들어도 되고, 터미널에서 mkdir 명령어로 만들어도 됩니다.
저는 매번 하던 대로 윈도우 탐색기에서 폴더를 만들고, Git Bash Here 메뉴로 터미널을 실행하겠습니다.
clone 받을 폴더명은 remoterepo_clone로 했으며, 다음과 같이 터미널을 실행합니다.
이후 터미널을 실행한 화면은 다음과 같습니다.
우리가 지금까지 로컬 저장소를 만들 때 여기서 $ git init 명령을 실행했습니다.
하지만, 서버 저장소를 복제(clone) 하기 위해서는 폴더만 만들면 됩니다.
여기서 $ git clone https://github.com/shiri0/remoterepo.git . 을 실행해 clone 한 화면이 다음과 같습니다.
$ git clone https://github.com/shiri0/remoterepo.git . 을 실행해 서버(원격) 저장소를 그대로 복제해 내려받습니다.
여기서 중요한 부분이 <디렉터리> 자리에 점(.)을 입력했습니다.
이미 remoterepo_clone이라는 폴더를 만들어서 그 아래에서 내려받기 위해서입니다.
그렇지 않으면 서버 저장소를 폴더 명으로 해서 새롭게 폴더까지 만들어지게 되어 의도치 않은 결과를 얻게 됩니다.
이와 같이 clone을 실행하면 경로 뒤에 (master) 브랜치까지 생성된 것을 확인할 수 있습니다.
$ ls -al 명령어로 파일목록을 확인하면 .git 이라는 저장소 폴더까지 모두 확인됩니다.
$ git remote -v 명령어로 서버(원격) 저장소가 자동으로 등록되어 있는 것을 알 수 있습니다.
■ 소스트리(Sourcetree)에서 Clone
소스트리(Sourcetree)에서도 쉽게 Clone 받을 수 있습니다.
다음과 같이 저장소를 추가할 때와 마찬가지로 기존 저장소 탭 옆에 [+]를 클릭해 새 탭을 만듭니다.
다음과 같이 새로운 탭이 생기는데, 상단에 Clone 메뉴를 클릭합니다.
다음과 같은 화면을 확인할 수 있습니다.
이제 각 항목에 알맞은 정보를 입력하면 됩니다.
먼저, 맨 위의 항목인 “소스 경로 / URL:”이라고 되어 있는 항목에 GitHub의 URL을 입력합니다.
그런데, GitHub 주소를 입력하고 포커스를 다른 입력 칸 등으로 벗어나면 원격 저장소 정보와 로컬 저장소들을 조회해서 아래 “목적지 경로:”와 “이름:” 항목을 자동으로 입력되게 되는데, 다른 새로운 저장소로 Clone 받고자 하는 것이므로 다음과 같이 원하는 정보로 수정합니다.
“목적지 경로:” 항목은 [탐색] 버튼을 클릭해 탐색기에서 원하는 폴더를 찾아 [폴더 선택]을 클릭해 입력하였습니다.
입력하고 나면 아래 “이름:” 항목은 폴더명으로 자동 입력이 됩니다.
모두 입력이 되고 나면 아래 [클론] 버튼을 클릭합니다.
다음과 같이 클론(Clone) 받은 로컬 저장소를 확인할 수 있으며, 자동으로 원격 저장소 정보까지 origin이라는 이름으로 설정되어 있음을 알 수 있습니다.
그런데, 조금 이상한 부분이 확인됩니다. 혹시 여러분은 찾으셨을까요?
좀 더 자세히 확인해 보겠습니다.
다음은 Clone 받은 저장소 remoterepo_clone의 커밋 이력입니다.
다음은 최초 로컬 저장소 remoterepo의 커밋 이력입니다.
Clone 받은 저장소 remoterepo_clone의 커밋 이력에는
와 같은 HEAD정보가 확인됩니다. 이 것은 다른 저장소에 없었던 정보임을 알 수 있습니다.
소스트리의 왼쪽 사이드 메뉴의 “원격” 메뉴에서도 origin 아래에 HEAD라는 브랜치가 있음을 알 수 있습니다.
다음에 학습하겠지만, 다음과 같이 터미널에서 원격 브랜치 목록을 확인해도 마찬가지입니다.
여기서 보니, origin/HEAD는 origin/master를 가리키고 있습니다. 꼭 심볼릭 링크 같습니다.
이러한 것으로 볼 때 origin/HEAD는 서버 저장소의 master 브랜치의 HEAD인데 왜 브랜치처럼 인식이 되는 건지는 잘 모르겠습니다.
그냥 둬도 관계는 없습니다만, 뭔가 헷갈리게 느끼시는 분들은 다음과 같이 삭제할 수 있습니다.
$ git remote set-head origin -d 명령으로 삭제합니다.
remote set-head 명령은 원격 브랜치의 HEAD를 변경할 때 사용하는 명령이며 사용법은 다음과 같습니다.
# 원격 브랜치 HEAD 삭제
$ git remote set-head <서버 저장소 이름> -d(또는 --delete)
이상으로 서버(원격) 저장소의 정보를 로컬 저장소로 내려받는 방법 중 하나인 clone(클론)이었습니다.
다음에는 다른 방법도 살펴보겠습니다.
'코딩해보니 > Git' 카테고리의 다른 글
[Git_47] 서버(원격) 저장소에서 내려 받기 - Fetch (0) | 2023.04.20 |
---|---|
[Git_46] 서버(원격) 저장소에서 내려 받기 - Pull (0) | 2023.04.18 |
[Git_44] 서버(원격) 저장소로 전송(push) 할 때 유의할 점 (0) | 2023.03.31 |
[Git_43] 로컬 저장소의 커밋을 리셋(reset) 후 전송(push) 하기 (0) | 2023.03.30 |
[Git_42] 서버(원격) 저장소 - 전송하기 (git push) (0) | 2023.03.29 |
댓글