Day1에서는 Git을 사용하기 위한 기본 지식을 배웠다.
Day2, Day3에서는 협업을 위해 알아야 할 지식과 활용법을 배웠다.
소프트웨어를 개발할 때, 여러명의 개발자들이 하나의 소스코드를 공유하고 다루게 된다. 여러명의 개발자가 각자 다른 영역을 개발하기 때문에 다른 버전의 소스코드가 많이 생성 될 수 밖에 없는데 이 때 동시에 여러 개발자가 작업하더라도 코드가 충돌하지 않고, 완성 가능성이 희박하더라도 도전적인 개발을 할 수 있도록 해주는 것이 바로 브랜치(branch)이다.
사용자에게 제공되는 버전은 master(main) 브랜치에 두고 목적에 맞게 브랜치를 생성하여 독립적인 작업 공간을 가지고 다양한 개발을 할 수 있다.
다양한 브랜치에서 기능이 완성되면 merge를 통해 master(main)브랜치에 반영할 수 있다.
$ git branch : 사용 가능한 로컬 브랜치를 보여준다.
$ git branch -r : 사용 가능한 원격 브랜치를 보여준다.
$ git branch -a : 사용 가능한 모든 브랜치를 보여준다.
$ git branch name : 브랜치를 생성한다.
$ git switch A : A 브랜치로 브랜치를 변경한다
$ git merge A : A브랜치를 현재 브랜치에 Merge한다. (주로 main브랜치에서 사용)
$ git branch -D A : A브랜치를 삭제한다.
$ git push origin A : origin이라는 원격 브랜치에 A브랜치를 push한다.
효과적으로 버전관리시스템(VCS)을 사용하기 위해서는 프로젝트에 어울리는 브랜치 전략이 필요하다. 대표적인 브랜치 전략 3가지는 다음과 같다.
현업에서 가장 자주 쓰이는 git flow 브랜치 전략을 사용한 협업을 git flow cheatsheet을 사용해 간단하게 실습해보았다.
참고) https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html
실습 내용은 다음과 같다.
팀장
1. 팀장은 new organization을 만든다.
2. issue template을 작성한다.
3. 원격 저장소를 clone 후 $ git flow init 명령어를 통해 git flow 초기 설정을 한다.
4. develop 브랜치에서 대상 파일을 생성 후 origin develop으로 push 한다.
5. 팀원들에게 초기 설정 완료를 알린다.
6. Pull Request를 보고 코드 리뷰를 진행한 후 수정이 있으면 수정 사항을 요구한다.
7. 추가 요구 사항이 없고, 코드리뷰가 끝나면 merge한다.
팀원
1. 초기 설정이 완료된 협업 원격 저장소에가서 fork한다.
2. 협업 원격 저장소에서 나의 할일 issue를 등록한다.
3. fork한 repository를 로컬 repository에 clone하고 $ git flow init 명령어를 통해 초기 설정을 한다.
4. $ git feature start {feature name} 명령어를 통해 독립적인 작업 공간에서 개발을 진행한다.
5. 개발이 완료되면 add, commit하고 $git flow feature finish {feature name} 명령어를 통해 develop 브랜치와 merge한다.
6. fork한 나의 원격 저장소에 git push한다.
7. 나의 원격 저장소에서 Pull Request를 한다.
8. 수정 사항을 확인하고 추가 작업을 한다.
9. 작업이 끝나면 $git push origin develop 명령어를 통해 나의 원격 저장소에 push한다.
10. push가 끝나면 Pull Request가 Open 상태이기 때문에 자동으로 협업 원격 저장소와 merge 할 수 있는 지 업데이트 된다.
11. 만약 내가 작업하는 동안 다른 팀원의 작업이 반영된다면 merge conflict가 발생하는데, 이 경우 반영된 협업 원격 저장소의 변경 사항을 fetch, merge하여 내가 conflict를 해소하고 add, commit, push 한다.
실습한 자료 ) https://github.com/kiaeh2323/Blackjack
간단하게 블랙잭 게임에 대한 설명을 작업으로 두고 실습을 진행했다.
대학에서 팀 프로젝트를 진행할 때 github를 사용했던 적이 있는데 그 땐 이렇게 까지 git에 대해 알지 못한 상태에서 마구잡이식으로 진행했었다. branch의 개념, 활용법, merge의 원리 등 기본 지식을 모르는 상태에서 pull request를 하니 수많은 merge conflict가 발생했고 왜 발생하는 지도 잘 모르는 상태에서 억지로 코드를 수정해가며 작업했던 기억이 떠올랐다.
이번 강의와 실습을 통해 Git을 통한 협업을 확실히 배울 수 있었고 실무에 적용할 수 있을 거란 자신감을 얻었다.