- Published on
Git 이란?
[Git] Git 이란?
작업을 하다가 백업이 필요하면 USB에 담아본 적 다들 있을겁니다.
최종, 최최종, 찐최종, 찐찐최종 같은 이름으로 내용이 바뀔 때 마다 백업본을 만들어 두죠.
또한, 여러명이서 작업을 한다면 한 명이 모든 작업 파일의 수정사항을 합쳐야 했습니다.
합치는 것도 보통일이 아닐 뿐더러, 실수할 가능성도 상당하고 백업본 관리 또한 굉장히 힘듭니다.위의 작업을 쉽게 하기 위해 VCS(Version Control System)가 존재합니다.
그 중 가장 많이 사용되고 있는 Git에 대해 알아보겠습니다.
Git
은 버전을 편리하게 관리할 수 있도록 도와주는 도구 입니다.
작업을 하다가 이전 작업으로 돌아가고 싶을 때, 다시 돌아갈 수 있도록 도와주는 도구이며, 많은 개발자들이 사용중인 버전 관리 툴
입니다.
개발자 외에도 어떠한 파일의 히스토리를 저장하고 싶을 때 사용할 수 있습니다.
로컬에서만 사용할 수도 있지만, GitHub
, GitLab
, Bitbucket
등 원격 저장소와 연동하여 사용하면 다른 곳에서도 똑같은 히스토리와 파일들을 받아 사용할 수 있습니다.
버전 관리 시스템(VCS)은 형상관리 툴이라고도 불립니다.
Git의 탄생 배경
Linux 커널
유지 관리 초기(1991–2002년) 동안 소프트웨어 변경 사항은 패치와 아카이브 파일로 전달되었습니다. (최종, 최최종 같은 느낌)
2002년에 Linux 커널
프로젝트는 BitKeeper
라는 독점 DVCS
를 사용하여 버전을 관리했습니다.
하지만 2005년에는 Linux 커널
을 개발한 커뮤니티와 BitKeeper
를 개발한 상용 회사 간의 관계가 깨졌고 무료 상태가 취소되었습니다.
이로 인해 Linux 개발 커뮤니티(특히 Linux의 창시자인 Linus Torvalds)
는 BitKeeper
를 사용하면서 배운 몇 가지 교훈을 바탕으로 다음과 같은 특징을 지닌 자체 도구를 개발하게 되었습니다.
- 속도
- 심플한 디자인
- 비선형 개발에 대한 강력한 지원(수천 개의 병렬 분기)
- 완전 분산
- Linux 커널과 같은 대규모 프로젝트를 효율적으로 처리할 수 있음(속도 및 데이터 크기)
이렇게 2005년에 Git
이 탄생하게 됩니다.
Centralized Version Control vs Distributed Version Control
중앙 집중식 버전 관리 (Centralized Version Control)
- 하나의 서버에 히스토리를 두고 시용하는 방식
- 내용을 업데이트 하면 즉각적으로 동기화
- 서버가 다운되면 작업을 할 수 없음
- 서버가 있어야 하므로, 인터넷 없는 오프라인 환경에서 작업을 할 수 없음
분산 버전 관리 (Distributed Version Control)
- 서버에만 히스토리 정보가 있는게 아니라, 각각의 사용자들도 동일한 히스토리 정보를 가지고 있는 방식
- 서버가 다운되더라도 각각의 사용자가 히스토리를 가지고 있기 때문에 서로의 정보를 이용해서 서버를 보관 및 일을 이어나갈수 있음
- 각각의 사용자들이 히스토리 정보를 가지고 있기 때문에, 인터넷 없이 오프라인 환경에서도 작업을 할 수 있음
Git은 분산 버전 관리(Distributed Version Control) 방식입니다.
Git이 기존의 VCS 보다 빠른 이유
기존의 VCS
는 delta-based
였습니다.
delta-based
는 버전별로 달라진 점만 가지고 있습니다. 그렇기 때문에 버전을 변경하면 변경된 대상을 계산을 하게 되는데, 이부분에서 시간이 오래 걸리고 문제점이 많이 발견됩니다.
이에 반해 Git
은 프로젝트의 전체적인 내용을 스냅샷
해 가지고 있기 때문에 계산이 필요없어 버전 변경 및 브랜치 이동 시 오류없이 빠르게 동작합니다.
프로젝트 전체를 스냅샷
을 따놓으면 무겁지 않을까 생각할 수도 있는데, Git
은 변경되지 않은 파일들은 예전 파일의 링크를 가리키고 있기 때문에 스냅샷
은 굉장히 가볍습니다.