Git이란?
Git이란?
Git은 크고 작은 모든 프로젝트를 빠르고 효율적으로 다루기 위해 설계된 무료 오픈 소스 분산 버전 관리 시스템(DVCS: Distributed Version Control System)이다.
Git의 특징
버전관리시스템 대부분은 관리하는 정보가 파일들의 목록이며 CVS, Subversion, Perforce, Bazaar 등의 시스템은 각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다. (델타 기반 버전관리시스템)
그러나 Git은 데이터를 파일 시스템 스냅샷의 연속(또는 스냅샷의 스트림)으로 취급하고 크기가 아주 작다. 만약 사용자가 파일을 수정했다면 Git은 해당 파일에 대한 정보를 저장하는 게 아니라 프로젝트 전체의 스냅샷을 저장한다.
또한 Git은 거의 모든 명령이 로컬에서 실행돼서 CVCS와 같이 중앙 서버에서 관리하는 시스템과 달리 네트워크의 속도에 영향을 받지 않는다. 프로젝트의 모든 히스토리를 로컬 데이터베이스에서 관리하기 때문에 서버 접근을 할 필요가 없기 때문에 빠르게 조회가 가능하다. 그렇기에 오프라인 상태에서도 작업이 가능하다는 장점이 있다.
Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다. 체크섬은 SHA-1 해시를 사용해서 만들어지며 파일의 내용이나 디렉터리 구조를 이용하여 체크섬을 구한다. 이로 인해 데이터의 정보가 변경되거나 오염되지 않게 관리할 수 있다. (Git의 무결성)
Git의 상태, 영역
Git은 파일을 3가지 상태로 관리한다.
- Modified: 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 상태
- Staged: 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태
- Committed: 데이터가 로컬 데이터베이스에 안전하게 저장된 상태
이 3가지 상태는 Git 프로젝트의 3가지 영역과 연결되어 있다.
- Working Tree(Working Directory) : 프로젝트의 특정 버전을 Checkout 한 영역
- Staging Area(Index) : 곧 커밋할 파일에 대한 정보를 저장하는 영역
- Git Directory(Repository) : Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 영역
※ Staged 상태에 대한 명확한 개념 정리
커밋되기 전 상태(Staged)와 수정된 상태(Modified)의 차이점이 뭔지 명확하게 구별이 안 돼서 찾아본 결과, 간단한 예로 내가 2개의 파일을 작업했는데 1번째 파일은 작업을 완료했고 2번째 파일은 미완료했다. 작업을 마무리해야 하는 상황에서 1번째 파일은 Staged 상태로 2번째 파일은 Modified 상태로 두면 다음 작업 시 미작업 파일을 쉽게 구별할 수 있고 저장해야 할 파일 또한 쉽게 찾을 수 있다.
Git의 버전 생성 과정
- 작업 트리에서 파일을 수정(파일이 Modified 된 상태)
- 스테이징 영역에 파일을 스테이지 해서 커밋할 스냅샷 생성(Modifed에서 Staged 상태로 전환)
- 스테이징 영역에 있는 파일들을 커밋해서 Git 디렉터리에 영구적인 스냅샷 저장(Staged에서 Committed 상태로 전환)
참고
1. https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EA%B8%B0%EC%B4%88
Git - Git 기초
Subversion과 Subversion 비슷한 놈들과 Git의 가장 큰 차이점은 데이터를 다루는 방법에 있다. 큰 틀에서 봤을 때 VCS 시스템 대부분은 관리하는 정보가 파일들의 목록이다. CVS, Subversion, Perforce, Bazaar 등
git-scm.com
2. https://softwareengineering.stackexchange.com/questions/119782/what-does-stage-mean-in-git
What does 'stage' mean in git?
I find git hard to understand as I could not find the meaning of the words used for the actions. I have checked the dictionary for the meaning of 'stage' and none of the meanings were related to so...
softwareengineering.stackexchange.com