[GIT] Git 개념 & 원리

반응형

Git 이란 무엇인가?

Git이란 분산형 버전 관리 시스템(Version Control System)의 한 종류이며, 빠른 수행 속도에 중점을 둔다.

우리가 레포트를 제출한다고 가정했을때, 처음에 저장했을때 'report.txt'라고 저장을 했다가 수정을 하면서 'report_final.txt'로 저장하고 또 수정을 거치면서 'report_final_final.txt'...로 수정을 하게 되는 경험이 있었을 것이다.

여기서 이 파일들을 복사, 백업, 저장 등을 한것이고, 이러한 것을 버전 관리라고 부른다.

버전 관리란?

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

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

Git 의 필요성

  1. 나와 내 동료가 같은 웹사이트에서 동시에 같은 'A'페이지를 업데이트 하고 있다고 하자.
  2. 나는 무언가를 변경하고 저장한 다음 웹사이트에 'A'페이지를 업로드 한다.
  3. 그런데 이때 동료가 동시에 'A'페이지에서 작업을 할 때 문제가 발생된다.
  4. 만약 확인하지 않고 동시에 작업을 한다면 누군가의 작업은 겹체 쓰여질 것이고 지워질 것이기 때문이다.
  5. Git은 이와 같은 일을 사전에 방지해준다.
  6. 나와 동료는 같은 페이지에 각자 수정사항을 업로드 할 수 있고, 두개의 복사본을 저장한다.

즉, 모두 같은 환경에서 개발하여 불필요한 시간을 없애고 서로 주고 받는 와중에 일어나는 충돌을 최소화 하는 것이라고 말할 수 있다.

프레임워크를 갖추고 공통으로 쓰는 코드들을 미리 넣어두고, 테스트 코드나 샘플코드들을 넣어주어서 프로젝트 개발 시작하기전에 팀원 모두 같은 코드로 테스트할 수 있는 환경도 제공할 수 있다.

Git 의 장점

  • 소스 코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다.(브랜치를 통해 개발한 뒤, 본 프로그램에서 합치는 방식(Merge)으로 개발을 진행할 수 있다.)
  • 분산 버전 관리이기 때문에 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있고, 중앙 저장소가 날라가 버려도 원상복구할 수 있다.
  • 팀 프로젝트가 아닌, 개인 프로젝트일지라도 Git을 통해 버전 관리를 하면 체계적인 개발이 가능해지고, 프로그램이나 패치를 배포하는 과정도 간단해진다.

Git 기본 용어

Git을 사용하기 위해 알아야 할 용어 몇가지가 있다.

 

(1) Repository

스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳이다.

Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.

원격 저장소(Remote Repository)

: 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소다.

로컬 저장소(Local Repository)

: 내 PC에 파일이 저장되는 개인 전용 저장소다.저장소를 만드는 방법은 두 가지가 있다.

아예 저장소를 새로 만들거나, 이미 만들어져 있는 원격 저장소를 로컬 저장소로 복사해 올 수 있다.

 

스테이지 내용은 .git/index 파일에 저장되고,

저장소의 내용은 .git/HEAD 파일에 저장된다.

(2) Working Tree (Working Directory)

저장소를 어느 한 시점을 바라보는 작업자의 현재 시점.

파일 수정, 저장 등의 작업을 하는 디렉터리로, '작업 디렉터리(working directory)'라고도 한다.

(3) SnapShot

특정 시점에서 파일, 폴더 또는 워크스페이스의 상태를 의미.

스냅샷을 통해 특정 시점에 어떤 파일에 어떤 내용이 기록되어 있었는지, 폴더 구조는 어떠했는지, 어떤 파일이 존재했는지 등 저장소의 모든 정보를 확인할 수 있다.

Git에서는 새로운 버전을 기록하기 위한 명령인 커밋(commit)을 실행하면 스냅샷이 저장된다

① 개발자는 작업 디렉토리에 있는 파일을 수정

② 수정된 파일을 모아 정리하여 만든 Snapshot을 Staging 디렉토리에 추가하고 저장

③ GIT 디렉토리에 저장 (Staging 디렉토리에 저장된 파일을 앞으로 영구 불변의 상태를 유지하는 Snapshot 으로서 git 디렉토리에 저장하는 것)

(4) Checkout

이전 버젼 작업을 불러오는것.

(5) Staging Area

저장소에 커밋하기 전에 커밋을 준비하는 위치.

예를 들어 작업 트리에서 10개의 파일을 수정했는데 4개의 파일만 버전으로 만들려면 4개의 파일만 스테이지로 넘겨주면 된다.

즉, 로컬 스테이지에 올려둔 파일만 원격 저장소에 커밋할 자격이 있는 것이다.

(6) Commit

현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업.

(7) Head

현재 작업중인 Branch를 가리킨다.

(8) Branch

가지 또는 분기점을 의미하며,

작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을때 Merge를 하여 작업을 한다.

(9) Merge

다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.

반응형