[스파르타코딩클럽] 핵심 쏙쏙 Git - 2주차 개발일지
지난 1주차에는 git이 무엇인지, 버전 관리, commit, repo에 대해 배웠었다. 개념을 배우며 실습하였지만 아직까지 완벽하게 개념이 잡히진 않았다. 그러나 2주차 수업을 통해 실습 덕분에 완벽히 이해할 수 있었다. 2주차에는 협업을 위한 단계에 대해 학습하였다.
2주차 수업목표
- 협업하기 위한 Git 기본 개념을 익힌다. - isuue, branch, merge
- 두 명 이상과 협업하는 Git 프로젝트를 만들 수 있다.
- 기능별로 나누어 작업 내역을 남길 수 있다.
01. 누가 이 작업할 거예요? - Isuue 할당
협업을 할 때는 아래의 단계를 따른다.
1단계. 누가 이 작업을 할 것인지 정한다. - Issue
2단계. 각자 맡은 것을 작업한다. - Branch
3단계. 각자 작업을 프로젝트에 합친다. - Merge
(경우에 따라) 작업한 내용을 리뷰하고 최종적으로 프로젝트에 반영한다. - PR 후 merge
Issue란?
: 프로젝트에서 해결해야 하는 문제
- 버그(프로그램이 원하는 대로 동작하지 않는 것)를 신고 = Bug report
- 기능 추가 등의 프로젝트 개선 제안 (enhancement)
- 위 문제들을 해결하기 위한 작업 단위
=> 협업을 하기 위해 issue를 만들어 누가 작업할지 정하고, 브랜치를 만들어 작업할 공간을 나눈다.
02. 각자 공간에서 작업하기 - Branch
1단계. 누가 이 작업을 할 것인지 정한다. - Issue
2단계. 각자 맡은 것을 작업한다. - Branch
3단계. 각자 작업을 프로젝트에 합친다. - Merge
브랜치(branch)는 특정 commit에서 나뭇가지처럼 갈라져나와 작업할 수 있다. 기능별로 이름을 만들어 각 브랜치에서 작업해준다. 현재 작업하는 브랜치를 선택하는 것을 체크아웃(checkout)이라고 한다. 체크아웃된 브랜치에만 commit이 반영된다.
03. 작업 내용 합치기 - Merge
1단계. 누가 이 작업을 할 것인지 정한다. - Issue
2단계. 각자 맡은 것을 작업한다. - Branch
3단계. 각자 작업을 프로젝트에 합친다. - Merge
Merge(병합)는 브랜치를 다른 브랜치에 합치는 것이다. 즉, 특정 브랜치의 commit들을 다른 브랜치의 commit 내역에 모두 반영하는 것이다. 브랜치명은 규칙을 가지고 잘 이름을 지으면 프로젝트 관리가 쉬워진다. 작업이 완료된 브랜치는 보통 삭제해준다. 나중에 브랜치 설정이 꼬이는 것을 방지할 수 있다. 각 작업 브랜치에서 작업할 때는 다른 브랜치의 영향을 받지 않고 독립적으로 작업할 수 있다.
04. 충돌 해결하기 - Merge conflict
하나의 파일을 여러 브랜치에서 수정하고 하나의 브랜치에 merge하려고 할 때 merge conflict(병합 충돌)이 발생한다. 양 쪽에서 내용이 수정되었는데 어떤 내용을 반영해야할 지 인식하지 못하기 때문이다. 이럴 때 git은 친절하게 충돌이 난 내용을 자동으로 파일 내용을 고쳐서 보여준다.
merge conflict를 고치려면 내가 원하는 대로 파일을 수정하고 merge commit하면 된다.
05. 원격 repo와 Branch
원격 repo는 로컬 repo와 연결되어있다. 사실 이 연결은 로컬 repo의 브랜치와 원격 repo의 브랜치가 연결된 것과 같다. 따로 설정을 해주지 않으면 기본적으로 로컬 repo의 브랜치명과 같에 원격 repo의 브랜치명이 생성되어 tracking이 된다. tracking 한다는 것은 로컬 repo와 원격 repo의 특정 브랜치를 연결해주는 것이다.
pull과 push는 기본적으로 tracking(추적)되고 있는 브랜치를 기준으로 commit 내역을 반영한다.