버전 관리 시스템은 크게 2가지 방식이 있다. 과거에는 중앙집중식 위주로 버전을 관리하다가, 요새는 분산식으로 많이 이용하는 추세이다. 분산식 버전관리의 대표적인 예가 바로 Git 이다.
- 중앙집중식 (Central Control System) : CVS, Subversion
- 분산식 (Dynamic Control System) : Git
중앙집중식은 중앙 서버에서 별도로 파일을 관리한다. 클라이언트는 중앙 서버에서 파일을 받아서 사용(checkout)하는데 만약 중앙 서버가 다운되면 답이 없다(..)
반면 분산식은 클라이언트는 저장소를 전부 복제한다. 그래서 서버가 다운되어도 이 복제물로 다시 작업을 시작할 수 있다. 즉, 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다. 게다가 Github 같은 원격 저장소를 이용할 수 있어서, 보다 효율성있게 파일 관리가 가능하다.
Git 이란?
Git은 2005년 리누스 토발즈가 만든 분산식 버전관리 시스템이다. 중앙집중식보다 속도가 빠르고 효율적으로 개발할 수 있다. 여러개의 branch로 쪼개지고 merge로 병합하면서 하나의 프로젝트를 완성시키는 것이 Git 이다.
Gitflow : Git의 브랜치 전략
Gitflow는 Git branch의 관리전략 중 하나이다. 아래 사진이 Gitflow의 예시인데, 효율적으로 소스를 관리하기 위해 목적에 맞는 브랜치로 쪼갠 모습이다.
- 최초로 init을 실행하면 Master 브랜치가 된다. 이는 언제든지 릴리즈가 가능한 상태여야 한다.
- Hotfix 브랜치는 Master 브랜치에서 결함이 발견되었을 경우, 결함을 수정한 후 Master 브랜치와 병합한다.
- Release 브랜치는 Master 브랜치와 Develop 브랜치로 병합된다.
- Develop 브랜치에서는 말 그대로 실제 개발을 하는 브랜치이다.
- Feature 브랜치는 신규 기능을 추가할 때 사용된다.
예를 들어, Develop 브랜치에서 개발을 진행하다가 Feature 브랜치와 병합하고, Develop 브랜치에서 Release 브랜치로 이동해서 작업 후 Release 브랜치가 완성되면 Master 브랜치와 Develop 브랜치 양 쪽에 커밋되는 흐름이다.
Git의 동작원리
- 스냅샷(Snapshot) : 데이터를 가져오거나 프로젝트를 저장할 때마다 그 시점의 파일에 대해서 스냅샷을 저장한다. 변경되지 않은 파일은 다시 파일을 저장하지 않고 이전에 지정한 동일한 파일을 링크한다.(파일을 복사하지 않음. 파일 저장공간 사이즈가 작음)
- 체크섬(checksum) : 데이터를 저장하기 전, 파일에 대한 체크섬을 구하고 이 체크섬을 통해 데이터를 관리한다. SHA-1 해쉬를 사용하며, 커밋을 복원할 때 앞의 6자리를 알면 이 커밋으로 돌아갈 수 있다. 파일명이 아닌 컨텐츠의 해쉬 값을 저장하므로, 파일명이 변경되도 내용이 동일하면 같은 해쉬이다.
- 섹션(Sections) : 데이터는 Working Directory, Staging Area, Repository로 나뉘어서 저장된다.
Git 설치
Git을 사용해서 소스를 관리하기 위해서는 아래의 두가지 방법이 있다.
- SourceTree라는 Git GUI 툴을 이용한 Git
- Git Bash를 이용한 Git
Git 설정 파일
- 시스템 전역경로 : C:\Program Files\Git\mingw64\etc\gitconfig 파일
- 사용자 디렉토리 : C:\Users\사용자\.gitconfig 파일
- 워킹 디렉토리 경로 : 워킹 디렉토리/.git/config
Git 설정 파일은 위 3가지 경로에서 확인할 수 있다.
References
'Software Engineering > Git, SVN' 카테고리의 다른 글
티스토리 글 작성하면 Github에 자동 커밋시키는 방법 (feat. 잔디 심기) (4) | 2024.03.30 |
---|---|
Github action nothing to commit, working tree clean 오류 해결 (0) | 2024.03.30 |
.gitignore 간단하게 만들기 (.gitignore 샘플 예시) (0) | 2023.11.26 |
Github를 트리 구조로 볼 수 있는 Octotree 플러그인 (1) | 2023.11.24 |
SVN Connector 설치 오류날 경우 (SVN Connector 수동 설치) (1) | 2023.09.13 |