우리는 이전 글을 통해
- 원격 저장소에 있는 리파지토리를 로컬 저장소로 가져오는 방법(clone, pull)
- 로컬 저장소와 원격 저장소를 연결하는 방법(remote)
에 대해 알아보았습니다.
그런데 git clone과 git 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 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로 병합됩니다.
'etc > git' 카테고리의 다른 글
[Git] git add / git commit / git push (0) | 2023.01.12 |
---|---|
[Git] 원격저장소에서 로컬저장소로 clone(복제)/pull(가져오기)/remote(연결) (0) | 2023.01.04 |
[Git] 새 repository 만들기, 삭제하기 (0) | 2022.12.29 |
.gitignore 은 파일을 무시한다. (프로젝트 버전관리) (0) | 2022.11.12 |