Git

리눅스 커널의 창시자인 리누스 토르발스가 BitKeeper의 라이선스 논란에 대한 대안으로 개발함. 속도와 효율성을 강조한 분산형 VCS의 대표 주자.

특징

  • 변경 사항의 추적, 파일 비교, 작업 취소가 가능한 버전 관리 시스템
  • 네트워크가 끊겨도 작업이 가능한 분산형 버전 관리 시스템
  • 분산 환경 하에서 여러 개발자가 동시에 작업을 할 수 있다.
  • 여러 브랜치를 통해 다양한 작업을 동시에 진행할 수 있다.
  • 스테이지 영역을 통해 선택적으로 커밋이 가능하다.

주요 개념

개념 설명
저장소 Repository 프로젝트의 모든 파일, 변경 기록, 버전 정보를 저장하는 곳
로컬 저장소(Local Repository)와 원격 저장소(Remote Repository)로 나뉜다.
커밋 Commit 파일의 특정 상태를 로컬 저장소에 저장하는 작업
각 커밋은 고유의 ID(SHA-1 해시)를 가진다.
커밋은 자신의 부모 커밋을 기억하는 자료구조로 이루어져 있다.
커밋 메세지로 변경 내용에 대한 태그를 달 수 있다.
브랜치 Branch 브랜치는 특정 커밋의 ID값을 가리키는 포인터이다.
보통 “코드의 독립적인 작업 흐름”이라고 표현도 되나, 이는 추상적인 표현이고
실제 브랜치는 특정 커밋의 ID를 가리키고, 그 커밋이 자신의 부모 커밋을 기억함으로써 독립적인 코드 작업 흐름을 볼 수 있는 것.
병합 Merge 하나의 브랜치를 다른 브랜치에 통합하는 작업
동일한 곳을 서로 다른 두 브랜치가 다른 내용으로 수정했을 경우 병합 충돌이 발생할 수 있으며
이 경우에는 수동으로 해결해줘야 한다.
스테이징 Staging 수정한 파일을 커밋 전에 준비 상태로 두는 단계

깃을 사용하는 이유

(1) 협업 도구 : 여러 사람이 동시에 작업해도 코드 충돌을 최소화할 수 있음
(2) 변경 기록 보존 : 누가, 언제, 무엇을 변경했는지 추적 가능
(3) 오류 복구 : 잘못된 변경 사항이 있더라도 과거의 특정 커밋으로 돌아갈 수 있다.
(4) 확장성 : 개인 규모 프로젝트, 기업 규모 프로젝트까지 다양한 환경에서 활용 가능

Reference

UNIX시스템 - 김희천,김진욱 저