반응형

안녕하세요. Git Flow 사용 시나리오에 대해서 한번 가정해 보았습니다.



A 라는 업무를 하던 도중에 급하게 B 라는 업무를 먼저 처리해야하는 시나리오 입니다.


업무에서 흔하게 일어나는 시나리오 입니다.



먼저, Git Flow를 이용하지 않고 그냥 메인 브랜치에서 작업하면 이렇게 됩니다.



  1. A업무를 시작
  2. 수십개의 소스를 여기저기 파헤쳐 놓은 상황.
  3. 커밋하면 엄청난 버그와 에러가 발생할 상황.
  4. 4일 동안 작업한 많은 분량.
  5. 앞으로 4일은 더 해야 마무리 될 상황.
  6. 이 때 긴급 장애 상황으로 당장 B업무를 위한 소스를 수정해야 함!!
  7. A업무의 소스를 커밋 할 수도 없고 버리는 건 더 할 수 없음.
  8. OTL


이런 상황은 정말 최악입니다. 로컬 백업을 해서 복구를 하거나 이상한 방법으로 해결해야 될겁니다.


하지만, Git Flow 기능을 이용한 동일한 상황이라면 아래와 같이 대처가 가능합니다.


  1. A업무를 시작
  2. A업무를 위한 브랜치 생성
  3. 수십개의 소스를 여기저기 파헤쳐 놓은 상황.
  4. 커밋하면 엄청난 버그와 에러가 발생할 상황.
  5. 4일 동안 작업한 많은 분량.
  6. 앞으로 4일은 더 해야 마무리 될 상황.
  7. 이 때 긴급 장애 상황으로 당장 B업무를 위한 소스를 수정해야 함!!
  8. A업무의 소스를 일단 모두 커밋 함.
  9. 다시 개발 브랜치로 체크아웃하고 B 업무를 위한 브랜치 생성.
  10. B업무 개발완료 후 B업무를 위한 브랜치를 개발 브랜치에 병합.
  11. 다시 A업무를 위한 브랜치를 체크아웃.
  12. A업무 개발 완료 후 개발 브랜치에 병합.

네, 깔끔합니다. 하루 이상 걸릴 작업은 꼭 Git Flow 기능을 이용해 별도 브랜치에서 작업합시다.



1. 브랜치를 새로 생성할 경우 사용.

2. 브랜치를 좀 더 편하게 생성할 수 있음.

3. 2번의 깃 플로우를 클릭하면 나타나는 창.
 - 새 기능 시작 클릭





새 기능 시작 창


1. 기능명

 - 업무명, 기능명, 모듈명 혹은 이슈 넘버 등


2. 시작지점

 - 최근 개발 브랜치 : 개발 브랜치의 가장 최신 커밋 이력으로부터 브랜치 파생

 - 작업 사본 부모 : 현재 작업 중인 브랜치로부터 브랜치 파생

 - 명시된 커밋 : 특정 커밋 이력으로부터 브랜치 파생


3. 확인 클릭.




“A업무” 라는 새 기능 시작 후 SourceTree 화면






커밋하지 않은 A업무 폭풍 작업내용.






급하게 B 업무를 처리하기 위하여 임시 커밋






1. 현재 A업무 브랜치를 작업 중 입니다.

 - B업무 작업 시작을 위해 master 브랜치로 작업 브랜치를 이동 합니다.

 - master 를 더블 클릭 합니다.


2. A 업무 브랜치 작업 중일 때 Local Git Repository 입니다.


3. master 브랜치로 이동 후 Local Git Repository 입니다.

- 동일한 Local 폴더이지만 현재 작업 브랜치에 따라서 소스파일들이 변경 됩니다.


4. master 브랜치로 이동한 모습입니다.


5. 현재 커밋 이력 포인터가 A업무 브랜치를 시작하기 바로 전으로 이동하였습니다.







A업무와 동일하게 B업무 새 기능을 시작한 후 SourceTree 화면 입니다.






B업무 완료하고 커밋과 푸시  후 SourceTree 화면 입니다.





깃 플로우 메뉴를 클릭하면 나타나는 창 입니다. - B업무 브랜치를 종료하기 위해 “기능마무리”를 클릭 합니다.






 “기능마무리”를 클릭 후 나타나는 창 입니다.

 

!! 문제가 발생 했습니다.

- B업무 및 A업무 기능 시작을 모두 master 브랜치로부터 파생했는데 깃 플로우를 이용한 기능 마무리는 개발 브랜치로만 병합이 됩니다.

- 깃 플로우의 “새 기능 시작” 기능은 개발브랜치에서만 이용하는 것이 맞는 것 같습니다.

- 어쩔 수 없이 “취소”를 클릭 합니다.

- “깃 플로우” 기능을 이용했지만 결국 브랜치이므로 master 브랜치에서 B업무 브랜치를 병합하고 B 업무를 삭제하면 됩니다.





master 브랜치로 이동 후 메뉴의 “병합” 을 클릭 해서 나타난 창 입니다.


B업무를 종료하기위한 병합입니다.

현재 master브랜치에서 B업무 브랜치를 당겨와 병합니다.

빨간 박스를 선택하고 확인을 클릭합니다.





master 브랜치에 B업무 브랜치 병합 후  SourceTree 화면 입니다.


master 브랜치에 B업무 브랜치 병합 후  LocalRepository 화면 입니다.





A업무 브랜치로 다시 돌아온 후 Local Repository 화면 입니다.

A업무 마무리를 위하여 “새 텍스트 문서” 들을 삭제하고,

“A업무완료.txt” 파일을 추가하였습니다.




A업무를 커밋과 푸시하고 master 브랜치에서 A업무 브랜치를 당겨와 병합한 후 SourceTree 화면 입니다.

최종적인 master 브랜치의 Local Repository 화면 입니다. - A업무 브랜치, B업무 브랜치 모두 병합 완료 하였습니다.



반응형

+ Recent posts