형상 관리 도구로 다른 말로는 버전관리 시스템이다. 이는 소프트웨어를 개발하는 기업의 핵심 자신인 소스코드를 효과적으로 관리할 수 있게 해주는 무료 공개 소프트웨어입니다.
이러한 git의 가장 큰 장점은 여러 사람이 소스코드를 주고 받을 필요없이 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다는 점입니다.
이러한 병렬 개발을 가능하게 해주는 것이 바로 branch 이다.
브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념입니다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않아 여러 작업을 동시에 진행할 수 있습니다.
또한 이렇게 만들어진 브랜치는 다른 브랜치와 병합(Merge)함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있습니다.
아래의 명령어를 통해 브랜치를 생성, 통합, 제거 할 수 있습니다.
$ git branch : 현재 사용되고 있는 branch를 보여줌
$ git branch [만들려고 하는 브랜치 명] : 새로운 브랜치를 하나 만듦
$ git checkout [브랜치 명] : 사용하고자 하는 브랜치를 지명한다.
$ git merge [브랜치 명] : master의 branch와 해당 branch를 통합한다. (이 때 사용하고 있는 branch는 항상 master여야 한다. ) (통합을 했다면 반드시 썻던 브랜치는 제거해야한다.)
$ git branch –d [브랜치 명]: 해당 브랜치를 제거한다.
<그림 설명>
따라서 다음과 같은 과정을 통해 내 컴퓨터의 파일을 git repository에 저장할 수 있다.
git add [파일명] // Staging Area에 파일을 추가 저장(파일명이 . 일 경우 해당 파일에 있는 모든 파일 Staging Area 저장)
git commit -m "커밋 메세지" // local repository에 저장
git push // remote Repository에 저장
그 외
git fetch를 통해 git repository에 있는 커밋을 다운로드 받을 수 있고 git merge를 통해 다운 받은 커밋 내용을 내 컴퓨터에 다운받아 코드를 볼 수 있다.
git fetch와 merge는 pull 명령어를 통해 git repository에 있는 파일들을 한 번에 다운로드 받을 수 있다.
타겟 프로젝트의 저장소를 자신의 저장소를 Fork한다.
해당 파일의 내용을 다운로드 하기 위해 git clone을 한다.
git clone <fork한 git주소>
git clone https://github.com/{본인 GitHub Username}/{저장소이름} -b 브랜치명--single-branch
git add 파일명(or * 모두) // 추가/변경 파일
git commit -m "메세지" // 커밋
git push origin 본인_브랜치
여러 명이서 협업 프로젝트를 하다보면 필연적으로 Git을 사용하게 됩니다.
이때 git을 사용하다보면 일관성있는 규칙의 필요성을 느끼게 됩니다. 이때 개발자는 gitflow, git workflow, gitlab workflow 등과 같은 워크 플로우 전략이 제시되었습니다.
a. Master : 릴리즈를 할 때 사용하는 최종단계의 메인 브랜치
b. Develop : 다음 릴리즈 버전 개발을 진행하는 브랜치입니다. 어떤 기능 구현이 필요해지면 Develop브랜치에서 다시 브랜치를 내어 개발을 진행하며, 개발이 완료된 기능은 다시 Develop브랜치로 병합
c. Feature : 앞서 Develop브랜치에서 기능 구현을 이유로 브랜치를 생성하게 되는 데 그 브랜치가 바로 Feature 브랜치입니다. 브랜치 생성 기준은 한 기능 단위이다.
d. Release : Develop 브랜치에서 파생되는 브랜치이다. 현재 코드가 Master 브랜치로 병합될 수 있는지 테스트하고 테스트 과정에서 발생한 버그를 고치는 역할을 담당합니다.
e. Hotfix : Release브랜치를 통해 테스트 과정을 거쳤음에도 Master브랜치에서 버그가 발견될 수 있습니다. 이때 Master branch에서 Hotfix브랜치를 내어 버그를 수정. 디버그가 완료되었다면 Master 브랜치와 Develop브랜치에 병합해주고 브랜치를 닫습니다.
이러한 브랜치 전략은 엄격하게 각각의 브랜치의 역할을 규정하기에 위에서도 언급하였듯 계획적인 릴리즈를 스케줄링하는 대규모 프로젝트에 적합하다. 이는 대다수의 소프트웨어 개발에는 불필요한 절차를 준수하도록해 생산성을 떨어트리기도 합니다.
PR: https://wayhome25.github.io/git/2017/07/08/git-first-pull-request-story/
gitflow: https://onwah.tistory.com/12