설정과 초기화

Git

Git이란, 버전 관리 시스템(Version Control System, VCS)의 하나이다.

버전관리(Version Control System)

버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내 올 수 있는 시스템이다.

VCS를 사용하면

  • 각 파일을 이전 상태로 되돌리거나 프로젝트를 통째로 되돌리기 용이하다.
  • 시간에 따라 수정 내용을 비교해 볼 수 있고 누가 문제를 일으켰는지 추적가능하다.
  • 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.

버전관리 방식(3가지)

  1. 로컬 버전 관리

대표적인 로컬 버전 관리로는 RCS(Revision Control System)이 있다. RCS는 파일에서 변경되는 부분(Patch)만 기억하는 방식이다. 이 방식을 통해 용량 문제를 해결 할 수 있다.

그러나 로컬 버전 관리 시스템은 로컬에서만 동작하기 때문에 다른 개발자와의 협업하는 상황에서는 버전관리가 쉽지 않다.

  1. 중앙집중식 버전 관리(CVCS)

CVCS는 다른 개발자와의 협업을 위해 고안된 버전 관리 방식으로 파일 및 변경이력 등을 서버로 옮긴 것이다. 각 클라이언트는 서버에 접속후 특정 버전의 스냅샷(Snapshot)을 받아서 사용하는 형태로 동작한다. 이때 클라이언트가 스냅샷을 받아 사용하는 것을 Checkout이라고 한다. 이 방식은 여러 클라이언트들이 하나의 데이터베이스만을 사용하므로 동기화 문제가 없고 관리가 편하다는 장점이 있다.

그러나 이방식은 중앙 서버에 문제가 발생하여 한시간이 다운되면 그동안 아무도 협업할 수도, 백업할 수도 없는 상황에 놓이게 된다. 게다가 중앙 데이터 베이스의 하드디스크에 문제가 생기면 모든 기록이 사라지게 된다.

  1. 분산 버전 관리 시스템(DVCS)

DVCS에서의 클라이언트는 단순히 파일의 마지막 스냅샷을 checkout하지 않는다. 저장소를 히스토리와 더불어 전부 복제하는 방식이다. 서버에 문제가 생기면 복제물로 작업할 수 있다. 그렇기 떄문에 DVCS에서는 서버가 죽거나 오프라인 상태에서도 버전 관리가 가능하다. 거기에 대부분의 버전 관리가 로컬에서 이루어지므로 속도가 빠르다. 다만 중앙집중식 버전관리보다 복잡하고, 동기화에 관한 문제가 있다는 단점이있다. 그럼에도 Git은 분잔 버전 관리 시스템을 사용하고 있다.

Git의 핵심

지금까지 말한 것을 바탕으로 Git은 분산 버전 관리 시스템을 사용하기에 특이한 점들이 있다.

Git의 장점

기존의 VCS(Version Control System)은 파일들의 목록을 관리하는 경우가 대부분이다. 이에 시스템은 각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다.

반면 Git은 데이터의 저장방식에 차이가 있다. Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하고 크기가 매우 작다. Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다. 아래 그림을 보면 확인할 수 있듯이 Git은 파일이 변경되지 않았다면 성능을 위해 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만을 저장한다. Git은 데이터를 스냅샷을 시간순으로 저장한다.

Git은 여러가지의 장점을 가지고 있다.

  1. 대부분의 명령을 로컬에서 실행가능하다. 그렇기에 Git은 빠른 속도로 명령을 처리한다.
  2. 오프라인 상태이거나 VPN에 연결하지 못해도 막힘 없이 작업할수 있다.(Commit까지 가능하다.)
  3. 무결성(Git은 데이커를 저장하기 전에 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.)
  4. 커밋후에는 데이터를 잃어버리기 어렵다.(Git으로 무얼하든 Git 데이터베이스에 데이터가 추가된다. 되돌리거나 데이터를 삭제할 방법이 없다.)

3가지의 형태

Git은 파일을 Committed, Modified, Staged이렇게 3가지의 형태로 관리한다.

  • Committed: 데이터가 로컬 데이터베이스에 안전하게 저장된 상태
  • Modified: 수정한 파일을 아직 로컬 데이커베이스에 커밋하지 않은 상태
  • Staged: 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태

3가지의 형태는 Git 프로젝트의 3가지의 단계와 연관되어있다.

  • Git Directory: Git이 프로젝트의 메타데이터와 객체 데이커베이스를 저장하는 곳을 말한다.(다른 컴퓨터의 저장소를 Clone할때 생성된다.)
  • Working Directory: 프로젝트의 특정버전을 Checkout한 것이다. Git디렉토리는 지금 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 워킹 트리를 만든다.
  • Staging area: Git 디렉토리에 존재하며 곧 커밋할 파일에 대한 정보를 저장한다.(Git에서는 Index라고 표현한다.)

태그:

카테고리:

업데이트:

댓글남기기