우리는 이전 글을 통해

  1. 원격 저장소에 있는 리파지토리를 로컬 저장소로 가져오는 방법(clone, pull)
  2. 로컬 저장소와 원격 저장소를 연결하는 방법(remote) 

에 대해 알아보았습니다.


 그런데 git clonegit pull, 이 둘은 어떤 차이가 있고 언제 사용하는 걸까요? 결론부터 말씀드리겠습니다.

git clone은 로컬 히스토리를 유지하지 않고, git pull은 로컬 히스토리를 유지합니다.

 

  특징 기존추적기록 remote merge 사용시기
git clone 원격 리파지토리를 그대로 복붙한다(copy). X O X 프로젝트 시작 시
git pull 내 상태를 유지하면서 원격 리파지토리 내용을 내려받는다. O X O 프로젝트 진행 중(작업 전)

 

 

 다음과 같이 git clone은 원격 저장소의 내용을 로컬 저장소에 그대로 이전시켜 버립니다. 이 때, 자동으로 원격 저장소(remote)의 이름이 'origin'으로 저장됩니다. 따라서 나중에 git fetch origin을 한다면 clone 이후 수정된 사항에 대해 업데이트할 수 있습니다.

 

git clone했을 때, 원격저장소 이름은 origin이 됩니다.

 

 

 git pull은 git clone과 비슷하게 내용을 이전시키는 것은 맞지만, 나의 branch의 상태를 유지하면서 내용만 내려받습니다. 이 때, 내 로컬 히스토리가 유지되는 상태이기 때문에 히스토리 싱크가 맞지 않으면 오류가 발생합니다. (병합 충돌)

→ 이로 인해 초보자의 경우, branch가 꼬이는 경우가 많아 git pull보다 git clone을 해버리는 경우가 왕왕 있습니다.

 

▽ git pull의 형식은 다음과 같습니다.

$ git pull [remote] [branch]

▽ 그리고 git clone과 동일한 작업을 수행하려면 다음과 같습니다.

$ git pull origin master

: remote의 이름을 origin, branch 이름을 master로 하면, 로컬의 master가 원격의 master를 추적하는 git clone과 동일한 작업을 수행할 수 있습니다.

 


git fetch


 사실 git clone과 git pull을 비교하기보다 git fetch와 git pull를 비교하는 게 일반적입니다.

 

$ git fetch [remote]

 : 로컬에는 없지만 원격 저장소에 있는 모든 데이터를 가지고 옵니다. 하지만, 자동으로 로컬 branch에 merge시키는 git pull과는 달리, 내용만 가져오는 것이기 때문에 merge를 따로 수행해야 합니다.

 

$ git checkout [병합할 줄기 branch]
$ git merge [병합당하는 가지 branch]

: 가지 branch 줄기 branch로 병합됩니다.

+ Recent posts