2020/06/21 - [🗂️git] - [Git / Git Hub] Git 혼자 하기 편
2020/06/21 - [🗂️git] - [Git / Git Hub] Git의 기본
2020/06/21 - [🗂️git] - [Git / Git Hub] 탄생배경 및 간단한 소개
소프트웨어를 개발할 때에 개발자들은 동일한 소스코드를 함께 공유하고 다루게 된다. 동일한 소스코드 위에서 어떤 개발자는 버그를 수정하기도 하고 또 다른 개발자는 새로운 기능을 만들어 내기도 한다. 이와 같이 여러 사람이 동일한 소스코드를 기반으로 서로 다른 작업을 할 때에는 각각 서로 다른 버전의 코드가 만들어 질 수 밖에 없다.
이럴 때, 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능이 바로 '브랜치(Branch)' 이다. 각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할 수 있다. 이렇게 분리된 작업 영역에서 변경된 내용은 나중에 원래의 버전과 비교해서 하나의 새로운 버전으로 만들어 낼 수 있다.
브랜치(branch)란?
브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념이다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다. 영어단어로 branch는 나뭇가지로, 이를 Git에 적용해보면 큰 줄기(master)에서 뻗어나간 가지(branch)라 생각하자.
작업을 진행하면서 테스트가 필요하다거나, 여러 가지 버전으로 구현해보고 싶은 경우 어떻게 해야 할까?
프로젝트 폴더를 복사해서 테스트를 해야 할까?
branch를 사용하면 그럴 필요 없이 현재 버전을 그대로 가져와 새로운 작업공간으로 활용할 수 있다.
또한 원격 저장소( Github )에 여러 브랜치를 만들면 팀원들이 각각 독립적인 원격 저장소를 가질 수 있게 된다.
이처럼 branch는 독립적인 공간을 제공하므로 테스트, 통합 등으로 활용할 수 있다.
또한 이렇게 만들어진 브랜치는 다른 브랜치와 병합(Merge)함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있다.
아래 그림을 보면, 브랜치를 사용하여 동시에 여러 작업을 진행할 때의 작업 흐름을 한눈에 파악할 수 있다.
여러 명이서 동시에 작업을 할 때에 다른 사람의 작업에 영향을 주거나 받지 않도록, 먼저 메인 브랜치에서 자신의 작업 전용 브랜치를 만든다. 그리고 각자 작업을 진행한 후, 작업이 끝난 사람은 메인 브랜치에 자신의 브랜치의 변경 사항을 적용한다. 이렇게 함으로써 다른 사람의 작업에 영향을 받지 않고 독립적으로 특정 작업을 수행하고 그 결과를 하나로 모아 나가게 된다. 이러한 방식으로 작업할 경우 '작업 단위', 즉 브랜치로 그 작업의 기록을 중간 중간에 남기게 되므로 문제가 발생했을 경우 원인이 되는 작업을 찾아내거나 그에 따른 대책을 세우기 쉬워진다.
master 브랜치
저장소를 처음 만들면, Git은 바로 'master'라는 이름의 브랜치를 만들어 둔다. 이 새로운 저장소에 새로운 파일을 추가 한다거나 추가한 파일의 내용을 변경하여 그 내용을 저장(커밋, Commit)하는 것은 모두 'master' 라는 이름의 브랜치를 통해 처리할 수 있는 일이 된다.
'master'가 아닌 또 다른 새로운 브랜치를 만들어서 '이제부터 이 브랜치를 사용할거야!'라고 선언(체크아웃, checkout)하지 않는 이상, 이 때의 모든 작업은 'master' 브랜치에서 이루어 진다.
즉, git init 할 때 자동으로 생성해주는 기본 branch로, 동료들의 작업 내용을 하나로 합칠 때 사용하는 뼈대 branch로 사용할 수 있다.(이때 branch전략은 팀마다 다르다.)
브랜치 만들기
Git 에서는 작업에 따라 자유롭게 브랜치를 만들 수 있다. 그러나 이것을 효과적으로 관리하려면, 먼저 함께 작업할 팀원들과 어떠한 방식으로 브랜치를 만들고 통합할 것인지 미리 정해두는 것이 좋다. 예를 들어 새로운 브랜치를 만들 때에 브랜치 이름은 어떤 규칙으로 지을 것인지 또는 어떤 상황에서 브랜치를 만들 지, 어느 시점에 통합할 것인지 등등 규칙은 정하기 나름이다.
통합 브랜치(Integration Branch)
통합 브랜치란 언제든지 배포할 수 있는 버전을 만들 수 있어야 하는 브랜치 이다. 그렇기 때문에 늘 안정적인 상태를 유지하는 것이 중요하다. 여기서 '안정적인 상태'란 현재 작업 중인 소스코드가 모바일에서 동작하는 어플리케이션을 개발하기 위한 것이라면, '그 어플리케이션의 모든 기능이 정상적으로 동작하는 상태'를 의미한다.
만약 이 어플리케이션에 어떤 문제가 발견되어 그 문제(버그)를 수정한다던지 새로운 기능을 추가해야 한다던지 해야할 때, 바로 '토픽 브랜치(Topic branch)'를 만들 수 있다. 처음에는 보통 통합 브랜치에서 토픽 브랜치를 만들어 낸다.
일반적으로 저장소를 처음 만들었을 때에 생기는 'master' 브랜치를 통합 브랜치로 사용한다.
토픽 브랜치(Topic Branch)
토픽 브랜치란, 기능 추가나 버그 수정과 같은 단위 작업을 위한 브랜치 이다. 여러 개의 작업을 동시에 진행할 때에는, 그 수만큼 토픽 브랜치를 생성할 수 있다.
토픽 브랜치는 보통 통합 브랜치로부터 만들어 내며, 토픽 브랜치에서 특정 작업이 완료되면 다시 통합 브랜치에 병합하는 방식으로 진행된다. 이러한 토픽 브랜치는 '피처 브랜치(Feature branch)' 라고 부르기도 한다.
$git branch
local repository 브랜치 목록 확인
$git branch { 브랜치명 }
새로운 브랜치를 생성하면, 기반이 되는 브랜치( 부모 브랜치)의 버전을 그대로 복사한다.
커밋 내역( log )도 부모 브랜치와 같게 된다.
$git checkout { 브랜치명 }
브랜치를 이동하는 명령어.
$git checkout -b { 브랜치명 }
두 명령어를 합친, 즉 브랜치를 생성함과 동시에 이동하는 명령어.
1. Origin :
원격 저장소의 이름이다.
원격저장소 추가 명령어는
git remote add <이름> <url>로,
마찬가지로 git remote add origin <url> 형식으로 원격저장소를 추가하거나
git clone을 통해 원격저장소를 복사한다면
자동으로 origin이라는 이름의 원격저장소가 등록되게 된다.
2. master :
브랜치 중 가장 중심이 되는 기본적인 branch를 master 브랜치라고 부른다.
3. HEAD :
현재 내가 어떤 작업공간에 있는지를 나타낸다.
예를 들어 만약 제가 master 브랜치에서 작업을 하고 있다면
제 HEAD는 master 브랜치에 있게 되는 것이고,
다른 작업을 위해 feature 브랜치를 만들어줬다면
제 HEAD는 feature 브랜치에 있게 되는 것 이다. :)
'🗂️git' 카테고리의 다른 글
[Git] 자주쓰는 command (0) | 2020.11.29 |
---|---|
[Git / Git Hub] Git 용어 재 정리 (0) | 2020.06.23 |
[Git / Git Hub] Git 혼자 하기 편 (0) | 2020.06.21 |
[Git / Git Hub] Git의 기본 (0) | 2020.06.21 |
[Git / Git Hub] 탄생배경 및 간단한 소개 (0) | 2020.06.21 |