들어가며
git은 2005년에 개발된 Distributed Version Control System(DVCS)의 일종으로, 프로젝트 파일의 변경사항을 추적하고, 여러 사용자 간에 협업을 지원하는데 사용된다.
github는 git을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스이다.
DVCS는 협업을 위한 효과적인 시스템 버전관리를 위해 도입되었다.
Distributed Version Control System(DVCS)은 프로젝트의 버전을 효율적으로 관리하며 협업 환경을 강화하기 위해 설계된 시스템이다. 이는 전통적인 Centralized Version Control System(CVCS)과 달리 작업자들이 프로젝트의 전체 히스토리를 포함한 복사본을 자신의 로컬 환경에 clone할 수 있도록 지원한다.

DVCS의 장점은 다음과 같다
Remote Repository와 Local Repository
DVCS는 remote repository에 프로젝트를 저장하며, 작업자는 이를 local에 clone하여 독립적으로 작업할 수 있다.
이때 local에는 프로젝트의 모든 히스토리가 저장되므로 네트워크 연결 없이도 커밋, 브랜치 생성, 기록 조회 등의 작업이 가능하다. 즉, 모든 작업자가 프로젝트의 복사본을 가지고 있기 때문에, 중앙 서버가 손상되거나 접근 불가능한 경우에도 local에 있는 데이터를 사용해 복구할 수 있다.
변경 사항을 공유하거나 다른 작업자와 협업이 필요할 때만 remote repository와 동기화(push, pull)하는 작업을 진행 한다.
협업 지원
branch를 활용한 독립적인 기능 개발을 지원하는 동시에 merge 시스템을 도입하여 작업자 간 conflict를 해결하며 서로 다른 local에서 작업한 내용을 통합할 수 있다.
속도와 효율성
local에서 거의 모든 작업이 수행되기 때문에 네트워크 의존도가 낮으며, 속도와 효율성이 높다.
그렇다면 Git을 사용하는 이유는 무엇인가?
Git의 핵심은 히스토리를 관리하는 방법에 있다. 일반적인 VCS는 repository의 각 파일의 변화를 시간 순으로 관리하면서 파일의 집합을 관리한다.
그러나 Git은 프로젝트의 전체 내용을 Snapshot으로 관리한다. Git에서 말하는 Snapshot은 프로젝트의 특정 시점의 상태를 기록한 것을 의미한다. 이를 통해 프로젝트의 모든 파일과 디렉토리의 구조 및 내용을 특정 시점에서 정확히 복원할 수 있다.
이 때, 프로젝트가 저장된 시점에서 이전 저장 시점과 비교하여 변경이 발생한 파일만을 저장하며 변경되지 않은 파일은 이전 버전의 링크로 처리한다. 저장된 시점에서 프로젝트의 전체 파일을 저장하는 것보다 저장 공간을 효율적으로 사용하면서도 빠르게 히스토리를 추적할 수 있게 한다.

또한 Git은 데이터를 SHA-1 해시 알고리즘을 통해 암호화하여 저장하며, 모든 변경사항을 고유한 해시로 관리한다. 이를 통해 데이터의 손상이나 변조를 방지할 수 있다(Data Integrity, 데이터의 무결성)