Learn & Run

Git & Sourcetree - Pull과 Push 그리고 충돌 본문

Collaboration/Git

Git & Sourcetree - Pull과 Push 그리고 충돌

iron9462 2021. 5. 31. 00:16

목표

 

Git 명령어 Pull과 Push에 대해 알아보도록 합니다.

 

이전 포스팅까지 우리는 지금까지 Push라는 작업을 해왔습니다. 그렇다면 Pull은 무엇을 의미할까요? 영어가 의미하는 그대로입니다. Push가 로컬 저장소에서 원격 저장소로 버전을 업로드하는 과정이였다면 Pull은 반대로 원격 저장소에 관리되던 버전을 로컬 저장소로 가져오는 행위를 의미합니다.

 

 

 

1. 우선 두개의 로컬 저장소를 준비해둡니다.

 

  • 저는 test와 test2 총 두개의 로컬 저장소를 준비해두었습니다.
  • 실제 협업 환경을 위한 구성이라고 생각하시면 좋습니다.

 

 

2. test 로컬 저장소에서 Push를 통해 원격 저장소의 버전을 업데이트 합니다.

 

  • 간단하게 파일을 변경하고 Commit 후에 Push까지 완료합니다.

 

 

 

2. 여기서 test2 로컬 저장소에서 작업을 시작하려고 합니다. 어떻게 진행해야할까요?

 

  • test 로컬 저장소에서 진행했던 것 처럼 내 로컬에서의 작업을 바로 진행한다.
  • 내가 작업하기전에 새로운 버전이 master 브랜치로 업데이트 되었는지 확인한다.

위의 두가지 경우중에 당연히 2번째 경우가 맞는 것처럼 보일거라 생각합니다. 바로 여기서 사용하는 기능이 Pull 입니다. 우리가 만약 이 작업(Pull을 통해 원격 저장소의 버전을 로컬로 가져오는 행위)을 하지않고 바로 나만의 작업을 진행한다면, 나중에 예상치 못한 충돌을 피하는 것은 어려워 보일 것 입니다. 이러한 이유 때문에 Pull이라는 기능을 사용하여 나중에 일어날 충돌을 미리 방지하는 역할을 할 수 있습니다.

 

 

3. test2 로컬 저장소에서 작업을 진행하기 전에 Pull을 통해서 원격 저장소의 master 브랜치로부터 버전을 업데이트 합니다.

 

 

위의 사진을 보면 Pull 버튼에 업데이트 되어야할 버전의 숫자가 보입니다.

 

Pull 버튼을 누르면 위와 같은 팝업창이 나오게 됩니다.

 

원격 저장소의 버전과 로컬 저장소의 버전이 같아지게 된 것을 확인할 수 있습니다.

 

실제 폴더의 파일을 열어 동기화가 잘 진행되었는지 확인하도록 합니다.

 

 

4. test2 로컬 저장소에서 test 로컬 저장소에서 변경했던 line을 다르게 변경해봅니다.

 

  • Commit과 Push를 수행하여 원격 저장소에 버전을 업로드 합니다.

 

test2 로컬 저장소에서 위의 사진처럼 파일 내용을 변경하고 Commit과 Push를 진행합니다.

 

 

5. test 로컬 저장소로 돌아온 후 Pull을 진행하지 않고 파일 내용을 변경하고 Commit과 Push를 진행해 보도록 합니다.

 

 

test 로컬 저장소에서 위의 사진과 같이 파일 내용을 변경하였습니다.

 

Push를 하기전 Pull 버튼에 저장된 버전을 동기화하라는 신호가 있는 것을 확인할 수 있습니다. 그럼에도 불구하고 Push작업을 진행한다면 어떻게 될까요?

 

바로 다음과 같은 에러가 발생하며 Push가 거절됩니다. Push 작업을 진행하기 전에 Pull 작업을 진행하라는 것을 확인할 수 있습니다. 그렇기 때문에 우선 Pull을 통해 병합하는 과정이 필요합니다. 

 

Pull을 통해 버전을 가져오니 현재 로컬 저장소와의 동기화중에 충돌이 생긴걸 확인할 수 있습니다. 충돌이 생기면 당황하지말고 Sourcetree에서 Working Copy를 확인하여 파일을 수정하도록 합니다. 충돌이 생긴 부분에 대한 수정이 완료되었다면 Commit을 하고 다시 Push를 합니다.

 

 

6. Pull - Work - Commit - Pull - Push 순으로 진행해보도록 합니다.

 

  • Pull - Work - Commit 과정을 진행하는 도중에 누군가가 원격 저장소에 Push 했을 수도 있기 때문에 Push전에 Pull과정을 한 번 더 진행해보도록 합니다. 충돌을 최소화하기 위해 다음과 같은 습관이 꼭 필요하다는 것을 확인할 수 있습니다.