소스코드 버전 관리 시스템.
소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'
최종.ppt,최최종.ppt,최종_추가2.ppt,진짜최종.ppt
과같은 경험은 대부분 있을 것이다.
그리고 구글시트처럼 원격의 문서를 여러 명이 수정하고 저장한다면 내용이 지워지거나 다른 작성자 영역에 영향을 줄 것 같은 불안감도 느껴봤을 것이다.
이런 문제를 해결해주는 sw가 git과 같은 버전 관리 시스템이다.
소스코드 변경 이력을 쉽게 관리하고, 특정 시점에 저장된 버전과 비교하거나 특정 시점으로 되돌아갈 수도 있다. 또한 충돌을 발생시켜 내용을 덮어쓰거나 유실되는 실수를 방지한다.
말그대로 저장소다. 작업물이 이력 별로 구분되어 저장된다.
평소에는 내 PC의 local 저장소에서 작업하다가, 팀원들과 공유가 필요하면(배포,코드리뷰 등등) remote에 업로드한다.
물론 반대로 remote에 올려진 내용을 local로 받을 수 있다.
10개의 파일을 수정했지만 그 중에 7기만 저장소에 커밋하고 싶은 케이스를 생각해보자.
10개중 7개를 선택하는 작업이 바로 '인덱스에 등록' 또는 'stage'이다.
로컬환경에서 작업이 완료되면 공유가 필요한 파일만(index)에 올린다.
가지치기를 뜻하는데 사람,기능,이슈등 별로 새로운 가지를쳐서 작업을 진행하는 것을 의미한다.
이러한 branch안에서 commit,push,pull등의 작업을 진행한다.
추가로 만들어진 브랜치는 다른 브랜치와 병합함으로써, 작업 내용을 하나의 브랜치로 모을 수 있다.
branch를 사용하여 효과적으로 소스코드를 관리한다.
우리는 master라는 하나의 branch에서 여러명의 팀원들과 무수히 많은 push 요청 거절 또는 conflict를 경험해야한다.
각자 브랜치에서 작업을 진행하고, 사용자별로 한번의 merge만 수행하면 효율적이다.
repositroy를 처음 만들면, 'master'라는 이름의 브랜치를 만든다.
보통 실 서비스에 반영될 버전의 브랜치를 "통합 브랜치"라고도 한다.
주로 master branch를 통합 브랜치로 사용한다.
기능 추가, 버그 수정과 같은 task 단위의 브랜치이다.
토픽 브랜치에서 특정 작업이 완료되면 다시 통합 브랜치에 병합하는 방식으로 진행된다.
통합,토픽 branch 외 효율적인 branch 운영 모델은 뒤에서 다룬다.
혼자 작업하는거나 단순한 구조라면 위 2가지 브랜치로만 사용해도 무방하다.