[Git] Git 이론

이진이·2023년 8월 20일
0
post-thumbnail

Git을 사용하는 이유


  1. 여러 명이 효율적인 작업이 가능하다.

    • 깃은 오픈소스이므로 누구나 사용할 수 있다.

    • 여러 개발자가의 업로드할 때 버전으로 관리하여 변경 사항이 사라지는 것을 방지할 수 있다.

    • 같은 파일에 동시에 여러 명이 접근하는 경우 각각 변경 사항을 병합할 수 있다.

  2. 쉬운 버전관리

    • 깃은 각각의 파일을 스냅샷 형태로 저장해서 하나의 파일 명으로 여러 버전을 가질 수 있다.

    • 여러 버전을 동시에 관리할 수 있어 데이터의 안정성이 보장된다.


Git 스냅샷


git은 스냅샷 방식을 사용하지만, 기존의 버전 관리 시스템들은 델타 방식을 사용했다.

델타 방식

변화된 사항만 기록한다.

VCS(Version Control System) 대부분은 “델타 기반 버전 관리”로, 관리하는 정보가 파일의 목록이다.각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다.

스냅샷 방식

파일에 변동이 생겼을 때, 파일의 상태 전체를 기록한다.

git은 데이터를 스냅샷의 연속으로 취급하여 크기가 아주 작다.

파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. Git은 데이터를 스냅샷의 스트림처럼 취급한다.

언뜻 보기엔 델타 방식이 유리해보이나,
만약 파일이 100번 수정 되었다고 할 때 53번째 수정되었을 때의 파일 상태를 불러와서 봐야 된다고 가정하면, 1번 상태부터 53번까지 변화를 모두 연산해 반영하고 53번째 파일의 전체 상태를 보여줘야 한다. 만약 다시 60번째 파일이 보고 싶어지면 또다시 1번부터 변화를 적용하여 다시 산출한다.

하지만 스냅샷 방식으로 각 버전을 통째로 기록해두면 52번째 수정된 파일을 불러오려면 바로 52번째 기록만 불러오면 된다. 버전 별로 차이점을 보고 싶으면 두 개의 스냅샷을 비교해주기만 하면 된다. 버전 관리에 있어서는 좀 더 용이한 방식이다.


Git의 특징


  1. 가지치기와 병합

    • 여러 가지 작업을 동시에 할 때 새로운 가지를 만들어서 독립적으로 다른 작업을 하고, 작업이 마치면 다시 메인에 병합할 수 있다.
  2. 가볍고 빠르다.

    • 깃의 작업은 대부분 로컬에서 진행된다.

    • 다른사람과 코드를 공유할 때만 중앙 서비스에 접속하면 되므로 네트워크 속도와 상관없이 빠른 작업이 가능하다.

    • SubVersion(SVN)과 달리 각 개발자가 중앙 집중 서버 저장소와 독립된 상태로 작업한다.

  3. 분산 작업

    • 여러 사람이 작업할 때 복사된 프로젝트에서 각각 작업할 수 있다.

    • 통합 관리자를 두어 개발된 코드를 병합하는 데에 집중을 하고, 개발자는 개발에만 집중할 수 있다.

  4. 데이터 보장

    • 체크섬이라는 검사 과정을 거친다.

      • 체크섬 : 해시를 사용하여 만든다. 16진수 문자열 == 커밋ID
        • ex) 24b9da6552252987aa493b52f8696cd6d3b00373
      • 커밋 아이디가 같다는 것은 파일 또는 구성이 완벽히 같다는 것
    • 누가 어느 파일을 작업했는지 기록이 남아서 버전 관리가 편리하다

  5. 준비 영역(Staging area)

    • 수정한 내용을 저장소에 반영하게 전에 검토하는 단계가 있다.
  6. 오픈소스

    • 소스코드를 공개한 상태에서 인터넷에 누구나 프로젝트에 기여할 수 Git있다.

Git의 영역 & 상태


Git 영역

git에는 세 가지 영역이 있다.

  • .git directory(Repository) : “커밋되어 버전을 관리하는 파일”들의 변경내역 저장소
    • 저장소를 생성했을 때 자동으로 생기는 .git 디렉토리 (로컬 저장소)
    • Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
  • Staging Area : 준비 영역
    • commit 할 준비가 된 파일들이 위치하는 영역
  • Working Directory : 실제 작업 영역
    • git init을 통해서 git이 관리하도록 지정된 디렉토리
    • Git이 추적 중인 파일들이 위치하는 영역

Git 영역에 따른 작업 흐름

  • HEAD : 현재 브랜치의 마지막 커밋의 스냅샷
    • 현재 브랜치가 무엇인지 가리키는 포인터 역할도 한다.
  • Index : Staging되어 있는 데이터들 == Staging Area의 내용 == 다음에 커밋할 것들
  • Working Directory : 실제 작업 영역

파일 상태 라이프 사이클

git이 관리(추적) X

  • Untracked : Working Directory에 존재는 하지만 git이 관리를 하지 않는 파일들의 상태
    • (commit 이후) 최초 만들어진 파일

git이 관리(추적) O

  • Unmodified : 수정되지 않은 상태
    • commit 이후 수정되지 않은 파일
  • Modified : 수정된 파일의 상태
    • commit 이후 수정된 파일
  • Staged : commit 하고자 하는 파일의 상태
    • 수정 이후 Staging Area로 이동한 파일
    • commit 이후 수정되지 않은 파일(Unmodified 상태)




참고 및 사진 출처

profile
프론트엔드 공부합니다. 블로그 이전: https://jinijana.tistory.com

0개의 댓글