개발하는 두더지

Sourcetree + Git Flow를 이용한 브랜치 전략 본문

Git

Sourcetree + Git Flow를 이용한 브랜치 전략

덜지 2019. 1. 5. 17:30

Sourcetree + Git Flow를 이용한 브랜치 전략

소스트리에서 gitflow를 어떻게 사용하는지 2가지 시나리오로 살펴보겠습니다.


지금까지 간단한 프로젝트에 Sourcetree와 Github을 이용하여 develop branch를 생성하여 작업해왔습니다.

이번에 스터디 팀에서 새로운 프로젝트를 진행하면서 gitflow를 써보기로 정해졌고, 여러 사이트를 검색해보면서 gitflow에 대해 알아보고 테스트 해봤습니다.

gitflow는 간단하게 말해서 branch를 쉽게 만들고 병합시켜주는 전략입니다. gitflow 없이 수동으로 branch를 만들고 작업하고 commit, push 할 수 있지만 gitflow를 쓰면 작업이 끝난 필요없는 branch를 자동으로 삭제해주고 develop 또는 master branch에 merge 시켜줘서 상당히 편리합니다.


master, develop branch가 있는 상황에서 몇가지 시나리오를 테스트하는 과정을 진행해보겠습니다.


# moduleD를 만드는 시나리오

1. moduleD를 만들어 달라는 요구사항이 생김

2. Feature/moduleD branch 생성

3. moduleD 작업

4. moduleD commit

5. Feature/moduleD 작업완료

6. develop push


# moduleE를 만들다가 moduleF를 급하게 만들어야되는 시나리오

1. moduleE 요구사항이 생김

2. Feature/moduleE branch 생성

3. moduleE 작업중

4. moduleF 요구사항이 생김

5. moduleE commit

6. Feature/moduleF branch 생성

7. moduleF 작업

8. moduleF commit

9. Feature/moduleF 작업완료

10. develop push

11. moduleE 작업완료

12. moduleE commit

13. Feature/moduleE 작업완료

14. develop에 merge될때 moduleF 와의 충돌 발생 가능성 있음

15. 충돌이 발생할경우 conflict 해결

16. develop push

13. moduleE branch 삭제가 안된경우 Feature/moduleE 작업완료



현재 master는 주황색 막대를 보면 Hotfix 작업을 완료한 상태입니다. develop은 마지막으로 moduleB를 작업완료한 상태이구요.

소스트리 탭의 '깃 플로우' 아이콘을 클릭합니다.


새 기능 시작을 클릭합니다.


최근 개발 브랜치는 develop 브랜치의 가장 최신 커밋 이력으로부터 브랜치를 만든다는 것을 의미합니다.

moduleD라고 기능 이름을 정하고 확인을 눌러줍니다.



왼쪽에보면 feature/moduleD 라고 브랜치가 생성됩니다.



android studio에서 moduleD 작업을 진행하고 소스트리를 보면 아직 커밋되지 않은 상태가 보입니다.



푸시하지말고 커밋만 진행합니다. 




브랜치의 상태를 보면 feature/moduleD는 로컬 저장소에서 commit만 되어있는 상태입니다. push를 안했기때문에 원격 저장소에는 이 브랜치가 올라가지 않습니다.



이제 moduleD의 작업이 완료되었으므로  '깃 플로우' 아이콘을 다시 누르고 '현재 작업 완료' 버튼을 클릭합니다.



작업을 마무리한 뒤에는 더이상 작업을 하지 않으므로 브랜치 삭제를 체크하고 확인



develop 브랜치에는 feature/moduleD의 작업 내용이 merge가 된 상태입니다. feaure/moduleD의 브랜치는 삭제가 되었구요.

이제 원격 저장소에 develop 작업내용을 push 해줍니다.





두번째 시나리오인 moduleE를 작업하다가 moduleF를 급하게 작업해야되는 상황입니다.

moduleE를 만들고 작업중인 내용은 생략했습니다. 위의 moduleD와 내용은 동일합니다. 

다시 상황으로 돌아와서 moduleE를 작업하다가 moduleF 작업이 들어오게되었습니다.  moduleE를 commit을 해주고 moduleF 브랜치를 만들어주면 아래와 같은 상태가 됩니다.


moduleF의 작업을 완료합니다.


moduleE를 깃 플로우 버튼을 눌러 작업완료를 해줍니다.



moduleE가 작업하는 부분과 moduleF가 작업하는 부분이 겹치는 경우 충돌이 발생하게 됩니다. 작성하는 코드에따라 충돌이 발생 안할 수도 있습니다.



테스트를 위해 충돌이 발생하는 case를 만들었고 소스트리 오른쪽 하단과 같이 어떤 부분에서 충돌이 발생했는지 표시해줍니다.

=======를 기준으로 위에 있는 <<<<<<< HEAD 는 develop를 브랜치를 의미하며 아래는 develop 브랜치에 merge를 할 feature/moduleE 브랜치를 의미합니다. IDE에서 충돌난 부분을 수정해줍니다.



충돌난 파일을 오른쪽 버튼을 클릭하고 충돌 해결된 것으로 표시하면 느낌표 모양의 아이콘이 없어지게 됩니다.


develop에 커밋할 때 충돌된 내역이 메시지에 담기게 됩니다.




'Git' 카테고리의 다른 글

[Git] Git Bash로 github 원격저장소에 연동  (0) 2017.05.30
Comments