안녕하세요, 오늘은 전세계 개발자라면 거의 99%가 사용하는 버전 관리 시스템을 알아보도록 하겠습니다.
예전에는 집중식 버전 관리 시스템(CVCS)의 대표격인 SVN(Subversion)을 많이 사용했다고 하는데, 지금은 익숙하지 않은 이름이 되어버렸습니다.
git 개념과 뗄레야 뗄 수 없는 플랫폼이 gitHub이기 때문에 gitHub과 관련된 기존 포스팅도 참고바랍니다.
1. 분산 버전 관리 시스템(DVCS)이란?
- 분산 버전 관리 시스템(Distributed Version Controll System, DVCS)
: 각 개발자가 중앙 서버에 접속하지 않은 상태에서도 코드 작업이 가능하며, 독립적인 결과물을 병합(또는 거절)할 수 있도록 버전을 관리해주는 시스템
- 중앙 저장소의 Version에 따라서 개발하는 SVN(Subversion)과 달리 Git은 개발자의 Commit history를 통해 버전 관리가 용이
- 개발 프로젝트의 local 저장소와 원격 저장소를 분리하여 독립적인 코드 관리가 가능
- 코드 결함 시 손쉽게 Commit history를 살펴 복원이 빠르며, 코드 리뷰를 비롯한 협업에 최적화된 시스템
2. Git의 핵심 개념
(1) Repository (저장소)
- Remote Repository (원격 저장소) : 원격 서버에 저장된 저장소로, 여러 사람이 함께 공유
- Local Repository (개인 저장소) : 우리가 직접 관리하는 저장소로, 개발 Local PC에 저장
(2) Staging (임시 저장) / Commit (변경 이력)
- 변경사항들이 반영되기 전 해당 변경사항의 이력들이 저장되는 Index에 기록하는 행위를 Staging이라 한다.
- 개별 변경 사항인 Stage가 반영된 이력을 Commit이라 한다.
(3) Branch
- Branch는 특정 Commit으로부터 분기되는 포인터로, 개발자들이 개발을 진행하고 있는 환경 또는 흐름을 뜻한다.
- 새로운 Branch가 생성되더라도 기존의 Main Branch는 유지된다.
(4) Merge (병합)
- 분기된 Branch를 다시 하나의 Branch로 합치는 것으로, Merge 과정에서 Conflict가 많이 발생한다.
- 여러 Branch들을 한꺼번에 Merge할 때 차례차례 Main Branch로 병합한 상태에서 진행한다.
3. Git 기반 플랫폼
(1) GitHub
- 2008년 개발된 최대 규모 오픈소스 DVCS (2018년 MS 인수)
- Git, SVN, Mercurial(HG), TFS 지원
- CI/CD (GitHub Actions)
- Vue.js, Docker, Tensorflow, React 등 많은 라이브러리가 GitHub에서 배포/유지보수
(2) GitLab
- 2013년 GitLab 사 개발
- Git 지원
- 개발 외 DevOps 환경 구축에 용이 (이슈 추적, 테스트, CI/CD 파이프라인)
- 3rd party 플러그인/툴 없이 자체 CI/CD
- Kubernetes 기반 배포 및 모니터링
- GitHub에 비해 느린 push, pull
(3) Bitbucket
- Atlassian이 개발/제공한 DVCS로서 Jira와의 연동성이 좋음
- Jenkins, CircleCI CI/CD 도구 제공
- 코드 리뷰, 테스트, 분석 도구를 활용한 Pull Request 단계에서의 Code Insights 기능
- 계정의 비공개 콘텐츠 clone, push 작업 시 2단계 인증(2FA) 절차 必
4. Git flow 모식도
(1) Remote 저장소에서 Local로 코드 다운로드 (NW 통신 要)
git pull [원격 저장소명]
(2) Main Branch에서 분기 후 본인 작업 Branch 생성
git branch [Branch명]
(3) 생성한 Branch로 이동하여 작업 시작하기
git checkout [Branch명]
(4) 코드 작성 후 수정 내역 확인 (과거 코드와의 비교)
git diff
'웹 & 앱 개발' 카테고리의 다른 글
[보안] Apache Log4j 보안 이슈 및 해결 방안 (0) | 2021.12.14 |
---|---|
[GitHub] 깃허브 잔디 심는 법 - GitHub Contributions (0) | 2021.09.10 |
댓글