본문 바로가기
Base/ETC

Git, Gitworkflow

by joooing 2020. 12. 16.
반응형

Git


Git은 파일 내용이 어떻게 변경되었는지 기록들을 보관해주는 '버전 관리 시스템(Version Control System)'이라고 할 수 있다. 버전 관리를 하게 되면 파일을 수정해도 다시 이전 상태로 되돌리거나 쉽게 복구할 수 있고, 어떤 내용을 수정했는 지 비교해 볼 수도 있고, 누가 언제 수정했는지도 알 수 있다.

Git? Github?

Git과 Github은 이름이 비슷해서 처음 접했을 때 같은 것으로 알기 쉽지만 둘은 전혀 다르다. Git은 버전을 관리하는 '시스템'이고, Github은 Git을 사용하는 유저들이 모인 '소셜 플랫폼(social platform)'이다.

Distributed System (분산 시스템)

분산 시스템은 여러개의 저장소(Repository)를 통해 관리하는 시스템이다. 하나의 저장소에 모든 데이터를 저장하게 되면 치명적인 오류가 발생할 경우 복구하기가 쉽지 않다. 하지만 분산 시스템은 여러 저장소에 데이터를 저장하기 때문에 어느 한 곳에 오류가 생겨도 다른 저장소를 통해 복구할 수 있다.

 

Git은 크게 서버 저장소인 Remote Repository, 컴퓨터의 로컬 저장소인 Local Repository에서 버전을 관리한다. Local Repository를 이용하면 네트워트 연결이 되어있지 않아도 계속 버전 관리를 할 수 있다.

 

누군가 Repository를 만들었는데 내가 수정하고싶다면, 나의 Repository로 fork 해오면 된다. 즉, 남의 저장소(Upstream Remote Repository)에서 내 저장소(Origin Remote Repository)로 그대로 복사해 가져오는 것이 fork이다. 여기까지의 과정은 모두 서버상에서 이루어진다. 이렇게 복사한 후, 서버상의 내 저장소(Origin Remote Repository)에서 내 컴퓨터의 Local Repository로 가져오고 싶다면 clone 을 하면 된다. 터미널에 $git clone '가져올url' 을 입력하면 내 컴퓨터에 그대로 복사가 된다.

 

✔️ fork : 내 서버 계정으로 가져오기

✔️ clone : 내 컴퓨터로 가져오기

반대로 Local Repository에서 수정을 완료하고 서버 저장소(Remote Repository)에 다시 가져다두고 싶으면 어떻게 하면 될까? 이번에는 push를 이용하면 된다. $git push origin master 명령어를 사용하면 서버에 있는 나의 Repository에 수정한 파일을 복사해 옮길 수 있다.

 

✔️ push : 내 컴퓨터에서 서버로 옮기기

 

Git Workflow

작업을 하던 공간(working directory)에서 로컬 저장소(local repository)에 저장을 하고, 그제서야 서버상의 저장소(remote repository)에 push를 할 수 있게 된다. (아래 그림 참고)

 

그리고 작업을 하던 공간(working directory)과 로컬 저장소(local repository) 사이에는 Staging area라는 공간이 하나 더 존재한다. 그냥 바로 저장하면 되지 왜이렇게 복잡하게 하는걸까? Staging area는 ‘수정후, Repository에 합쳐질 예정인 내용들’을 저장하는 곳이다. 중간 관리자 역할을 한다고 이해하면되는데, 동시에 저장되는 데이터 간의 충돌을 막아주기도 하고 선택적으로 버전을 관리하기도 한다.

 

Staging area에 먼저 add를 한 후, commit을 해야 Local Repository에 수정한 파일들을 올릴 수 있게 된다. 이 외에도 다양한 명령어가 있어 각 저장소를 연결해주는데, 전체적인 Git Workflow와 해당 명령어를 그림으로 정리해봤다.

Branching, Merging

BranchingMerging은 단어 뜻 그대로 가지치기, 합치기를 의미한다. 보통 현재 사용하는 버전은 master에서 관리하고, 세부적인 각 기능들의 버전은 feature에서 관리한다. 이 외에도 테스트하며 개발중인 버전은 develop에서 따로 관리하기도 한다.

현재 버전에서 일부 기능을 수정하고 싶다면 master에서 feature로 'Branching(가지치기)'을 해온 후 수정하면 된다. 반대로 feature에서 수정을 마친 후 다시 현재 사용하는 버전에 합치고 싶다면 master에 'Merging(합치기)'을 하면된다.

 

 

 

반응형

'Base > ETC' 카테고리의 다른 글

CLI (Command Line Interface)  (0) 2020.12.16
개발자가 질문하는 방법  (0) 2020.12.10

댓글