➡️ 협업시 브랜치들의 효율적 관리를 위한 브랜치 관리 전략 또는 방법론
Upstream Repository : 개발자들이 공유하는 저장소로 최신 소스코드가 저장되어 있는 원격 저장소
Origin Repository : Upstream Repository를 Fork한 원격 개인 저장소
Local Repository : 내 컴퓨터에 저장되어 있는 개인 저장소
Git-flow에는 5가지 종류의 브랜치가 있다.
master, develop ➡️ 항상 유지되는 메인 브랜치들
feature, release, hotfix ➡️ 일정 기간 동안만 유지되는 보조 브랜치들
tag를 이용해서 버전을 기록한다.
X . 0 : 프로젝트 추가
1 . X : 기능 추가
master에서부터 시작된 🍆
상시로 버그를 수정한 커밋들이 추가됨.
어느 시점에 반영이 됐는지 보기 위해서 merge + rebase 를 이용해서 git flow를 예쁘게 본다.
develop 에서 갈라져 나온 🍆
git flow를 깔끔하게 보기 위해 origin develop의 갈라나온 시점을 잘 관리해 주어야 한다.
git pull --rebase origin devlop 을 이용해서 제일 마지막에 반영된 develop에서 branch가 갈라 나온 것 처럼 보이게 한다.
작업이 완료되었다면, feature 브랜치는 develop 브랜치로 merge 됨.
develop 에서 갈라져 나온 🍆
배포 직전에 QA 수정하고, QA를 진행하면서 발생한 버그들은 release 브랜치에 수정됨.
QA 받고 나면 develop과 master에 push한다.
작업이 완료되었다면, release 브랜치를 master와 develop 브랜치로 merge 함.
hotfix 에서 수정하고 나면 develop과 master에 push한다.
출처 : 우아한 형제들 기술 블로그
1️⃣ 첫번째 방법: git clone
// 중앙 원격 저장소(remote repository)를 복제
> git clone[중앙 remote repository URL]
2️⃣ 두번째 방법: init -> remote add -> fetch/pull
// 현재 디렉토리를 빈 Git 저장소로 만들기
> git init
// 현재 작업 중인 Git 저장소에 팀의 중앙 원격 저장소(origin)를 추가하기
> git remote add origin [중앙 remote repository URL]
// 중앙 원격 저장소(origin)의 master 브랜치 데이터를 로컬에 가져오기만 하는 작업
> git fetch origin master
✅ fetch와 pull의 차이
fetch : 원격 저장소의 데이터를 로컬에 가져오기만 하는 작업
pull : 원격 저장소의 데이터를 가져와 자동으로 병합까지 하는 작업
팀원 중 한명이 로컬 저장소에 빈 develop 브랜치를 만들고, 중앙 저장소로 push하고,
// develop 브랜치 만들기 git branch develop // 중앙 저장소로 push git push -u origin develop
Github 페이지에서 Pull Request를 함.
(자신이 push한 develop branch를 병합해달라는 요청)
프로젝트 관리자는 해당 pull request를 merge 하고,
develop branch를 default branch로 설정함.
이제, 팀원들은 작업할 브랜치 만들어 작업하면 됨.
ex) login 기능을 추가할 브랜치면 [내가 만든 브랜치명]을 feature/login 으로 하면 된다.
git branch [내가 만든 브랜치명] develop git checkout [내가 만든 브랜치명] // 위의 두 명령을 합하면 git checkout -b [내가 만든 브랜치명] develop
1️⃣ 첫번쨰 방법: pull request를 이용
// 변경된 모든 파일을 스테이징 영역에 추가
> git add .
// 또는 특정 파일만 스테이징 영역에 추가하기
> git add [내가 수정한 파일명]
// 커밋하여 로컬 저장소에 변경된 사항들을 저장한다.
> git commit -m "적절한 커밋메세지 적으면 됨"
// 원격 저장소에 push 한다.
> git push origin [내가 만든 브랜치명] branch
깃헙에서 프로젝트 관리자에게 pull request를 보낸다.
이후, 프로젝트 관리자가 merge 한다.
2️⃣ 두번째 방법: 내가 직접 merge
// 로컬 저장소의 develop 브랜치에 중앙 원격 저장소의 최신 내용을 가져옴 (반드시 !!!)
// 참고로 pull 하면 원격 저장소의 데이터를 가져와 자동으로 병합까지 가능 !
> git pull origin develop
// [내가 만든 브랜치명] 브랜치를 develop branch에 병합
> git merge [내가 만든 브랜치명] branch
// 로컬 저장소의 develop 브랜치를 중앙 원격 저장소에 push 함.
> git push
출시 담당자는 QA를 시작하기 위해 먼저 release 브랜치를 생성하고, push하여 release 브랜치를 공유한다.
// develp 브랜치로부터 release 브랜치(release-1.0.0)를 생성
> git checkout -b release-1.0.0 develop
release-1.0.0 브랜치를 upstream에 push합니다.
(release-1.0.0)] > git push upstream release-1.0.0
// release 브랜치를 최신 상태로 갱신
(release-1.0.0)]> git pull origin release-1.0.0
// release 브랜치를 develop 브랜치에 merge
(release-1.0.0)]> git checkout develop
(develop)]> git pull origin develop
(develop)]> git merge --no--ff release-1.0.0
// develop 브랜치를 origin에 push
(develop)]> git push origin develop
마지막으로 master 브랜치에서 버전 태그를 달아줍니다.
//master 브랜치로 이동
(develop)]> git checkout master
// 1.0.0 태그를 추가합니다.
(master)]> git tag 1.0.0
// master 브랜치와 1.0.0 태그를 origin에 push 합니다.
(master)]$ git push origin master 1.0.0
새로운 브랜치를 생성하고, 작업 위치로 이동
> git checkout -b hotfix-1.2.1 master
작업하기
master에 합치기
// master 브랜치로 이동
> git checkout master
// 'master' 브랜치에 hotfix-1.2.1 브랜치 내용 병합
> git merge --no-ff hotfix-1.2.1
// 병합한 커밋에 새로운 버전 이름으로 태그를 부여
> git tag -a 1.2.1
// 'master' 브랜치를 중앙 원격 저장소(origin)에 올림
> git push origin master
develop에 합치기
// develop 브랜치로 이동
> git checkout develop
// 'develop' 브랜치에 hotfix-1.2.1 브랜치 내용 병합
> git merge --no-ff hotfix-1.2.1
// 'develop' 브랜치를 중앙 원격 저장소(origin)에 올림
> git push origin develop
참고한 자료 : https://woovictory.github.io/2019/01/23/Etc-Git-Flow-2/
코테 문제 막히는게 있어서 도움 받아볼수 있을까요? ㅎ