본문 바로가기
코딩해보니/Git

[Git_46] 서버(원격) 저장소에서 내려 받기 - Pull

by 위시랜 2023. 4. 18.

서버(원격) 저장소에서 내려 받기 - Pull
서버(원격) 저장소에서 내려 받기 - Pull

서버(원격) 저장소에서 내려받기

서버 저장소의 내용을 내려받는 방법은 크게 3가지가 있으며, 그 방법과 차이를 간략히 얘기하면 다음과 같습니다.

  • Clone (클론) - 서버(원격) 저장소의 내용을 전부 그대로 로컬로 복제.
  • Pull (풀) - 로컬 저장소와 다른 사항에 대해서만 내려받아 병합(merge)까지 수행함.
  • Fetch (패치) - 로컬 저장소와 다른 사항에 대해서만 내려받고 병합(merge)은 하지 않음.

Pull

clone 이 서버 저장소를 그대로 복제하는 방식으로 내려받는 다면,

로컬 저장소와 다른 업데이트된 내용만을 로컬 저장소로 내려받을 필요가 있습니다. 이때 사용하는 명령어가 pull입니다.

 

push가 서버로 업로드(전송) 하는 것이었다면,

반대로 서버 저장소의 업데이트된 내용을 로컬 저장소로 내려 받을 수 있는데, 이때 사용하는 명령어로 pull을 사용할 수 있습니다.

 

pull 명령어는 로컬 저장소보다 최신인 업데이트된 서버 저장소의 커밋 정보를 현재 로컬 저장소로 내려 받습니다.

pull 명령어를 주기적으로 사용하면 최신 커밋 정보로 로컬 저장소를 유지할 수 있습니다.

 

사용법은 간단하며 다음과 같습니다.

# 로컬 저장소와 다른 업데이트된 내용만을 로컬 저장소로 내려 받기
$ git pull

실습을 통해 확인해 보겠습니다.

 

지금까지 push와 clone을 통해 서버 저장소와 연동이 되고 있는 로컬 저장소(remoterepo, remiterepo_clone) 와의 관계를 그림으로 나타내면 다음과 같습니다.

실습을 위한 현재 Git 구성도
실습을 위한 현재 Git 구성도

같은 내 작업 PC내에 저장소만 달리 하고 있지만, 이것을 한 대의 PC가 아닌 두 사람이 다른 작업 PC에서 한 사람은 remoterepo라는 로컬 저장소를 만들어 작업을 하고 있고, 또 한 사람은 remoterepo_clone이라는 로컬 저장소를 만들어 작업 중이라고 생각해도 좋겠습니다.

 

현재는 서버 저장소(remoterepo)와 두 로컬 저장소(remoterepo, remoterepo_clone)와 모두 동기화되어 있는 상태입니다.

 

먼저, 로컬 저장소 remoterepo 에서 작업을 하고, 그 내용을 커밋하고, 서버 저장소로 push를 실행합니다.

그러기 위해 저는 index.html 파일을 하나 만들었습니다.

index.html 파일 생성 및 편집
index.html 파일 생성 및 편집

 

index.html 파일을 다음과 같이 작업하였습니다.

index.html 파일 생성 및 편집
index.html 파일 생성 및 편집

 

그런 다음, 저장하고 커밋한 후 서버 저장소에 푸쉬(push)하였습니다.

그 과정이 다음과 같습니다.

index.html 파일을 커밋 후 서버(원격) 저장소로 전송(push)
index.html 파일을 커밋 후 서버(원격) 저장소로 전송(push)

지금까지의 과정을 통해,

서버 저장소(origin)와 remoterepo 로컬 저장소가 동기화되었고,

동기화 시점이 변경되어 있음을 소스트리를 통해서도 다음과 같이 확인할 수 있습니다.

소스트리(Sourcetree)에서 remoterepo 로컬 저장소 커밋 이력 확인
소스트리(Sourcetree)에서 remoterepo 로컬 저장소 커밋 이력 확인

다음은 소스트리에서 확인한 remoterepo_clone의 커밋 이력입니다.

소스트리(Sourcetree)에서 remoterepo_clone 로컬 저장소 커밋 이력 확인
소스트리(Sourcetree)에서 remoterepo_clone 로컬 저장소 커밋 이력 확인

서버(원격) 저장소와 remoterepo 로컬 저장소만 동기화 되어 있고, remoterepo_clone 저장소는 커밋 정보가 다름을 알 수 있습니다. 이는 remoterepo_clone 로컬 저장소는 다른 내용을 가지고 있는 상태가 됩니다.

 

이제 pull 명령어를 이용해,

remoterepo_clone 로컬 저장소에서 업데이트된 서버 저장소의 커밋 정보를 내려받겠습니다.

 

그 실행 화면은 다음과 같습니다.

$ git pull 명령어로 내려 받기
$ git pull 명령어로 내려 받기

pull 명령어서버 저장소에 업데이트된 커밋을 로컬 저장소의 커밋 정보와 비교해 업데이트하게 됩니다.

 

$ git pull 을 통해 내려받은 후 소스트리에서 확인한 커밋 이력이 다음과 같습니다.

소스트리(Sourcetree)에서 remoterepo_clone 로컬 저장소 커밋 이력 확인
소스트리(Sourcetree)에서 remoterepo_clone 로컬 저장소 커밋 이력 확인

정상적으로 잘 받아졌음을 알 수 있습니다.

 

이와 같이 pull 명령어를 이용해 주기적으로 최신의 커밋 정보를 로컬 저장소를 업데이트해서 최신의 정보로 유지할 수 있습니다.

주기적으로 최신 정보를 업데이트 받는 것이 이후에 충돌을 최소화할 수 있습니다.

 

다음에는 fetch 명령어에 대해 확인해 보겠습니다.

 

감사합니다.

댓글