Undergoing

Git 전략 본문

개발/Software Engineering

Git 전략

Halkrine 2024. 7. 15. 15:45

버전 관리

Version Control or Revision Control or Source Control

  • 동일한 정보에 대한 여러 버전을 관리
  • 팀 단위로 개발 중인 소스 코드나, 청사진 같은 설계도 등의 디지털 문서를 관리하는 데에 사용됨
  • 문서의 변경 사항들에 숫자나 문자로 이뤄진 버전을 부여해서 구분
  • 버전을 통해서 시간적으로 변경 사항과 그 변경 사항을 작성한 작업자를 추적

버전 관리의 필요성

  • 무언가 잘못되었을 때 복구를 돕기 위하여
  • 프로젝트 진행 중 과거의 어떤 시점으로 돌아갈 수 있게 하기 위하여
  • 여러사람이 같은 프로젝트에 참여할 경우, 각자가 수정한 부분을 팀원 전체가 동기화하는 과정을 자동화하기 위하여
  • 소스 코드의 변경 사항을 추적하기 위하여
  • 소스 코드에서 누가 수정했는지 추적하기 위하여
  • 대규모 수정 작업을 더욱 안전하게 진행하기 위하여
  • Branch로 프로젝트에 영향을 최소화 하면서 새로운 부분을 개발하기 위하여
  • Merge로 검증이 끝난 후 새로이 개발된 부분을 trunk에 합치기 위하여
  • 많은 오픈 소스 프로젝트에서 어떠한 형태로든 버전 관리를 사용하고 있으므로
  • 코드의 특정 부분이 왜 그렇게 쓰여 졌는지 의미를 추적하기 위하여

from.wikipedia

 

버전 관리 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 버전 관리(영어: version control, revision control) 또는 소스 관리(영어: source control)[1] 혹은 소스 코드 관리(영어: source code management)는 동일한 정보에 대한 여러 버전을

ko.wikipedia.org

 

Git과 Github의 차이

Git : 버전 관리 시스템

GitHub :  Git으로 관리하는 프로젝트를 올려둘 수 있는 사이트

GitLab : 개인 혹은 조직이 Git Repository의 내부 관리를 제공하는 데에 사용 - 비공개 Github

Git 호스팅 사이트 모기업 특징 Billing

github.com Github Inc    
(MS에서 인수) 세계 최대 규모의 Git 호스팅 사이트 Public Repository 생성 무료. Private Repository는 3인 이하는 무료  
설치형 버전인 Enterprise는 월 21달러에 사용 가능      
gitlab.com GitLab Inc NASA, Sony 등 10만 개 이상의 조직에서 사용  
완전한 DevOps 플랫폼 제공 Public/Private Repository 생성 무료    
소스 코드 빌드에 유용한 도구 지원 성능에 따라 월 19~99달러 부담      
bitbucket.org Atlassian Jira와 연동이 쉬움 5명 이하 팀이면 Public/Private Repository 생성 무료
그 이상일 경우 월 3~6달러      

 

Git 전략의 유형

Git Flow

  • 프로젝트의 규모가 크거나, 팀원이 많을 때, 서로 다른 배포 주기를 가진 기능이 있을 때 주로 차용
  • 서로 다른 시나리오(rollback, hotfix, 배포)에 쉽게 대처할 수 있음
    • main/master
      • 해당 repository의 중심이 되는 branch
      • master branch 하위의 작업들이 모두 완료되면 해당 branch로 merge를 진행
      • 각 버전은 tag로 관리하는 것을 권장함과 동시에, 이 branch에서 많은 변화가 일어나서는 안 됨
    • develop
      • 개발의 중심이 되는 branch
      • 각 feature 및 hotfix 작업물을 취합하고, 정리가 되면 release branch로 merge를 진행
    • feature
      • 새로운 기능을 추가하는 branch
      • 근간 branch에는 존재하지 않고, 개발자의 repository에만 존재
      • develop branch로부터 파생되고, 마찬가지로 작업 완료 시 develop branch로 merge를 진행
    • release
      • 새로운 Product 릴리즈를 위한 branch
      • 지금까지 구현된 기능을 묶어 develop branch에서 release branch를 얻고, develop branch에서는 다음번 릴리즈에서 사용할 기능을 추가
      • release branch에서는 버그 픽스에 대한 부분만 커밋하고, 릴리즈가 준비되었다고 생각하면 master로 merge를 진행한다.
      • release branch에서 수정된 내용이 develop branch에 반영
      • develop branch로부터 파생되고, 작업 완료 시 develop과 master branch로 merge를 진행
    • hotfix
      • Product에서 발생한 버그를 관리하는 branch
      • 수정이 끝나면, develop, master branch에 반영하고, master에 다가는 tag 를 추가
      • release branch가 존재한다면, release branch에 hotfix branch를 merge하여 릴리즈 될 때 반영이 될 수 있도록 함
      • master branch로부터 파생되고, 작업 완료 시 develop과 master branch로 merge를 진행

Github-Flow

  • 기능이 빠르게 베이스 브랜치에 병합될 필요가 있거나 최신 기능이 항상 배포되어도 되는 환경일 때 용이함
  • CI / CD가 잘 갖춰져 있어 버그에 대한 대비가 잘 되어있을 때 좋음

Gitlab-Flow

  • GitHub flow는 너무 간단해서 배포, 릴리즈 등의 조금 복잡한 이슈를 보완하기 위해 나온 전략
  • 기본 구조는 GitHub-Flow와 같지만, 관리를 위한 휘발성 branch를 활용

Trunk

  • Trunk
    • main(Trunk) branch만을 활용하여 관리
    • 소규모, 페어 프로그래밍 등에 용이
  • Trunk at Scale
    • Trunk 기법에 최소한의 feature branch를 설정하여 개발