- 학습 내용
최근에 경험했던 두 개의 팀 프로젝트를 하며 은근히 머리를 아프게 하는 것이 git에 관련된 문제였다. 생각보다 많은 충돌과 그것을 되돌리는데 어려움을 많이 겪었다. 그것을 극복하기 위해 많이 사용한 것이 브랜치를 더 세부적으로 나누는 방법이었다. 그렇게 사용하니 충돌이나 의도하지 않은 코드 수정에 대비하기 아주 좋았다. 당연히 팀 차원에서의 코드 관리 역시 훨씬 수월해짐을 느꼈다.
- 브랜치
브랜치란 독립적으로 어떤 작업을 진행하기 위하 개념이다. 개발을 하다가 한 페이지 안에 여러 기능을 따로 구현하기 위해 코드를 복사해야 하는 일이 자주 발생한다. 이때 브랜치 기능을 활용하면 코드가 변경될 우려 없이 독립적으로 개발할 수 있다. 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 여러 작업을 동시에 할 수 있는 것이다. 브랜치의 장점으로 한 소스코드에서 동시에 다양한 작업을 할 수 있고, 소스코드의 한 시점과 동일한 상태를 만들고 브랜치를 넘나들며 작업을 수행할 수 있다. 마지막으로 각각의 브랜치에서 생긴 변화가 다른 브랜치에 영향을 주지 않고 독립적으로 코딩을 진행할 수 있다는 장점들이 있다.
브랜치를 여러 개 만들면 master 또는 main이라는 이름을 가진 통합 브랜치에 뿌리를 두고 각각의 브랜치가 갈라져 나오고 있는 모습을 보인다. 이렇게 나누어진 브랜치에서 각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할 수 있다. 분리된 작업 영역(브랜치)에서 변경된 내용들은 다른 브랜치와 병합(Merge)함으로써 다시 새로운 하나의 브랜치로 모을 수 있다. 만약 여러 명에서 동시에 작업을 할 때는 먼저 통합 브랜치에서 자신의 작업 전용 브랜치를 만든다. 그리고 각자의 브랜치에서 맡은 영역에 대한 작업을 진행한 후 작업이 끝난 브랜치는 통합 브랜치에 병합해서 변경 사항을 적용한다. 이렇게 작업을 진행하게 되면 '작업 단위', 즉 브랜치로 그 작업의 내용들이 모두 기록되기 때문에 문제가 발생했을 때 원인이 되는 작업을 찾아내거나 그에 따른 대책을 세우기 쉬워진다.
브랜치의 종류로 통합 브랜치(Integration Branch)와 피처 브랜치(Feature Branch)가 있고 통합 브랜치는 배포될 소스 코드가 기록되는 브랜치인데, Github Repository를 생성하게 되면 기본적으로 main 브랜치가 생긴다. (기존의 Repository의 경우 master로 되어 있는 곳도 많다) 해당 프로젝트의 모든 기능이 정상적으로 작동하는 상태의 소스코드가 담겨 있다. 피처 브랜치 같은 경우 기능 추가, 버그 수정과 같이 단위 작업을 위한 브랜치이다. 통합 브랜치로부터 만들어내며 피처 브랜치에서 하나의 작업이 완료가 되면 다시 통합 브랜치에 병합하는 방식으로 진행한다. 토픽 브랜치라고도 한다.
- 브랜치 명령어
-$ git branch 새로운 브랜치 이름 | 새로운 브랜치 생성 |
-$ git swich -c 새로운 브랜치 이름 -$ git checkout -b 새로운 브랜치 이름 |
새로운 브랜치 생성 후 해당 브랜치로 전환 |
-$ git branch | 브랜치 목록 확인 |
-$ git branch -v | 브랜치 목록과 각 브랜치의 최근 커밋 확인 |
-$ git branch -d 삭제할 브랜치 이름 -$ git branch -D (해당 명령어는 병합하지 않은 브랜치를 강제 삭제하는 방법) |
브랜치 삭제 |
-$ git switch 브랜치 이름 -$ git checkout 브랜치 이름 |
브랜치 전환 |
1. -$ git checkout master 브랜치 이름 2. -$ git merge dev |
브랜치 병합 master 브랜치로 dev 브랜치를 병합할 때 (master <- dev) |
-$ git log --branches --graph --decorate | 로그에 모든 브랜치를 그래프로 표현 |
-$ git stash | 아직 commit 하지 않은 작업을 스택에 임시로 저장 |
'인증,보안' 카테고리의 다른 글
HMAC (0) | 2023.03.14 |
---|---|
[인증/보안] 기초2 (0) | 2022.06.24 |
[인증/보안] 기초1 (0) | 2022.06.23 |
[Linux] 권한과 환경변수 (0) | 2021.12.22 |
Git 기초1 (0) | 2021.07.06 |