devFancy BE Developer

[Git 공식문서] Git 시작하기

2022-04-12
devfancy
Git

이 글은 Git 공식 문서를 통해 배운 것을 정리한 내용입니다.

버전 관리란?

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

  • 버전 관리 종류에는 로컬 버전 관리, 중앙집중식 버전 관리(CVCS), 분산 버전 관리 시스템이 있다.

    • 참고) VCS = Version Control System, 버전 관리 시스템

로컬 버전 관리

  • 로컬 버전 관리 시스템은 아주 간단한 데이터베이스를 사용해서 파일의 변경 정보를 관리했다.

  • 많이 쓰는 VCS 도구 중에 RCS(Revision Control System)라고 오늘날까지도 아직 많은 회사가 사용하고 있다.

  • RCS는 기본적으로 Patch Set(파일에서 변경되는 부분)을 관리한다. 이 Patch Set은 특별한 형식의 파일로 저장한다.

  • 그리고 일련의 Patch Set을 적용해서 모든 파일을 특정 시점으로 되돌릴 수 있다.

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

  • 팀 프로젝트를 진행할 때 다른 개발자와 함께 작업을 해야 하는 경우 CVCS를 사용한다.

  • CVCS는 파일을 관리하는 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)한다.

  • CVCS는 로컬 VCS에 비해 장점이 많다.

    • 모두 누가 무엇을 하고 있는지 알 수 있다.

    • 관리자는 누가 무엇을 할지 꼼꼼하게 관리할 수 있다.

    • 모든 클라이언트의 로컬 데이터베이스를 관리하는 것보다 VCS 하나를 관리하는게 훨씬 쉽다.

  • 하지만 이 CVCS 환경에는 몇 가지 치명적인 단점이 있다.

  • 가장 대표적인 것이 중앙 서버에 발생한 문제다. 만약 서버가 한 시간 동안 다운되면 그동안 아무도 다른 사람과 협업할 수 없고 사람들이 하는 일을 백업할 방법도 없다.

  • 그리고 중앙 데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃는다.

분산 버전 관리 시스템

  • DVCS(분산 버전 관리 시스템)에서의 클라이언트는 단순한 파일의 마지막 스탭샷을 Checkout 하지 않고 저장소를 히스토리와 더불어 전부 복제한다.

  • 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다.

  • 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다. Clone은 모든 데이터를 가진 진정한 백업이다.

  • 그리고 대부분의 DVCS 환경에서는 리모트 저장소가 존재한다.

  • 그래서 다양한 그룹과 다양한 방법으로 협업할 수 있다. 중앙집중식 시스템에서 할 수 없는 Workflow를 다양하게 사용할 수 있다.

짧게 보는 Git의 역사

  • Linux 창시자 Linux Torvalds가 자체적으로 만든 것이 Git이다.

  • Git은 다음과 같은 특징을 가지고 있다.

    • 빠른 속도

    • 단순한 구조

    • 비선형적인 개발(수천 개의 동시 다발적인 브랜치)

    • 완벽한 분산

    • Linux 커널 같은 대형 프로젝트에도 유용할 것

  • Git은 2005년에 탄생하고 아직도 초기 목표를 그대로 유지하고 있다.

  • 그러면서도 사용하기 쉽게 진화하고 성숙했다.

  • Git은 동시다발적인 브랜치에도 끄덕없는 슈퍼 울트라 브랜칭 시스템이다.

Git 기초

  • Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.

  • 성능을 위해서 파일이 달라지는 경우에만 새로 저장한다. Git은 데이터를 스냅샷의 스트림처럼 취급한다.

세가지 상태

  • Git은 파일을 다음과 같이 세 가지 상태로 관리한다.

    • Committed : 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다.

    • Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않는 것을 말한다.

    • Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.

  • 이 세 가지 상태는 Git 프로젝트의 세 가지 단계와 연결되어 있다.

  • Git directory 는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다. 이 .git directory가 Git의 핵심이다.

    • 다른 컴퓨터에 있는 저장소를 Clone할 때 Git directory가 만들어진다.
  • Working tree프로젝트의 특정 버전을 Checkout 한 것이다. Git directory 안에 압축된 데이터베이스에서 파일을 가져와서 Working tree를 만든다.

  • Staging area는 Git directory 안에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다. Git에서 기술용어로 Index라고도 한다.

  • Git에서 기본적으로 하는 일은 아래와 같다.

  1. Working tree에서 파일을 수정한다.

  2. Stating area에 있는 파일을 Stage 해서 커밋할 스냅샷을 만든다.

  3. Stating area에 있는 파일들을 커밋해서 Git directory에 영구적인 스냅샷으로 저장한다.


Comments

Index