Git
코드와 파일의 변경 이력을 저장 및 관리하는 분산형 버전 관리 시스템입니다. 여러 사람이 동시에 작업할 때 수정 내역을 쉽게 추적할 수 있고 협업할 수 있게 도와줍니다.
Github
Git으로 관리한 코드를 인터넷에 저장 및 공유할 수 있는 웹 서비스입니다. 협업과 공개 프로젝트 관리에 유용합니다.
버전 관리가 왜 필요한가?
협업하는 사람들 등과 파일을 공유할 때 직접 압축하여 공유하는 방식은 비효율적입니다. 이에 반해 Git은 변경 내역을 체계적으로 관리하고 쉽게 복원할 수 있습니다.
분산형 버전 관리란?
중앙 서버뿐만 아니라 각 사용자의 컴퓨터에도 전체 이력과 데이터를 복사해서 저장합니다. 만약 서버에 장애 또는 치명적 오류가 일어나 데이터 손실이 발생한다고 해도 안전하게 코드를 관리할 수 있습니다.
Git 핵심 용어
Git의 기본 구조와 용어
- Working Tree: 사용자의 컴퓨터에서 실제로 작업이 이루어지는 전체 영역을 의미합니다. Git이 관리하는 파일들과 그렇지 않은 파일들이 모두 존재하고 코드를 작성 및 수정하는 활동들이 여기서 이루어집니다.
- Working Directory: 실제 소스코드를 작성하고 편집하는 공간입니다. 아직 git이 변경 사항을 기록하지 않은 상태의 파일들이 위치하게 됩니다.
- Staging Area: 변경된 파일 중 Git으로 추적할 파일을 임시로 저장하는 공간입니다. 여러 작업을 분리해서 관리할 수도 있고, 원격 저장소로 올릴 파일을 선택적으로 관리할 수도 있습니다.
- Local Directory(.git): Staging Area에 올린 변경 사항을 commit하면 저장되는 공간입니다. commit된 내역은 원격 저장소로 업로드되기 전 단계이고 Git에서 핵심 데이터베이스 역할을 합니다.
주요 커맨드
- commit: Staging Area에 있는 변경 사항들을 스냅샷으로 기록하는 작업입니다. commit이 없다면 원격 저장소로 코드를 업로드할 수 없으며, 각 commit은 고유한 해시 값으로 관리됩니다.
- snapshot: commit 시점의 프로젝트 전체 상태를 저장한 것입니다. 특정 시점으로 돌아갈 수 있게 해주는 Git의 핵심 기능입니다.
- head: 현재 작업중인 브랜치의 가장 최신 commit을 가리키는 포인터입니다.
- branch: 여러 개발자가 각자 기능을 분리하여 작업을 할 때 사용하는 독립적인 작업 공간입니다. 다양한 목적에 필수적으로 사용이 됩니다.
- merge: 서로 다른 브랜치에서 작업한 내용을 하나로 합치는 과정입니다. merge할 때 충돌이 발생할 수 있으며, 이를 해결하는 것도 git의 주요 기능 중 하나입니다.