Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- tortoise SVN
- HTML Code
- MariaDB
- PostgreSQL
- PG-Strom
- graph database
- JSP
- Can't load AMD 64-bit .dll on a IA 32-bit platform
- Spring Boot
- tomcat
- 서브라임 텍스트
- typeorm
- Next.js
- loadcomplete
- Windows 10
- Eclipse
- HTML Special Entity
- orioledb
- exit code = -805306369
- Maven Project
- NextJs
- STS
- springboot
- OGM
- Spring
- BRIN
- Java
- NestJS
- Spring Cloud
- maven
Archives
- Today
- Total
Undergoing
Git 전략 본문
버전 관리
Version Control or Revision Control or Source Control
- 동일한 정보에 대한 여러 버전을 관리
- 팀 단위로 개발 중인 소스 코드나, 청사진 같은 설계도 등의 디지털 문서를 관리하는 데에 사용됨
- 문서의 변경 사항들에 숫자나 문자로 이뤄진 버전을 부여해서 구분
- 버전을 통해서 시간적으로 변경 사항과 그 변경 사항을 작성한 작업자를 추적
버전 관리의 필요성
- 무언가 잘못되었을 때 복구를 돕기 위하여
- 프로젝트 진행 중 과거의 어떤 시점으로 돌아갈 수 있게 하기 위하여
- 여러사람이 같은 프로젝트에 참여할 경우, 각자가 수정한 부분을 팀원 전체가 동기화하는 과정을 자동화하기 위하여
- 소스 코드의 변경 사항을 추적하기 위하여
- 소스 코드에서 누가 수정했는지 추적하기 위하여
- 대규모 수정 작업을 더욱 안전하게 진행하기 위하여
- Branch로 프로젝트에 영향을 최소화 하면서 새로운 부분을 개발하기 위하여
- Merge로 검증이 끝난 후 새로이 개발된 부분을 trunk에 합치기 위하여
- 많은 오픈 소스 프로젝트에서 어떠한 형태로든 버전 관리를 사용하고 있으므로
- 코드의 특정 부분이 왜 그렇게 쓰여 졌는지 의미를 추적하기 위하여
from.wikipedia
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를 진행
- main/master
Github-Flow
- 기능이 빠르게 베이스 브랜치에 병합될 필요가 있거나 최신 기능이 항상 배포되어도 되는 환경일 때 용이함
- CI / CD가 잘 갖춰져 있어 버그에 대한 대비가 잘 되어있을 때 좋음
Gitlab-Flow
- GitHub flow는 너무 간단해서 배포, 릴리즈 등의 조금 복잡한 이슈를 보완하기 위해 나온 전략
- 기본 구조는 GitHub-Flow와 같지만, 관리를 위한 휘발성 branch를 활용
Trunk
- Trunk
- main(Trunk) branch만을 활용하여 관리
- 소규모, 페어 프로그래밍 등에 용이
- Trunk at Scale
- Trunk 기법에 최소한의 feature branch를 설정하여 개발