[Git] Git 개념 이해

ChilihC·2021년 5월 24일
0

Git

목록 보기
1/2
post-thumbnail

Git 이란


Git은 버전 관리 시스템(VCS, Version Control System)중 하나이다.
더 정확하게 이야기하면 Git은 분산 버전 관리 시스템(DVCS, Distributed Version Control System)의 한 종류이다. 이것은 소스코드 등 파일의 변화를 관리하기 쉽게 해준다.

1. 버전 관리 시스템 (VCS, Version Control System)


버전 관리 시스템(Version Control System)은 파일 변화를 시간에 따라 기록하고 원할때 다시 불러올 수 있는 시스템이다. 많은 사람들이 버전을 관리하기 위해 이것을 이용한다. 이러한 "버전 관리 시스템"은 크게 4가지로 볼 수 있다.


1-1. 디렉토리 버전 관리 (Directory Version Control)

제대로된 VCS가 나오기 전, 많은 사람들은 버전 관리를 위해 디렉토리에 파일을 복사하는 방법을 사용하였다. 이 방법은 간단하고 사용하기 쉽지만 그만큼이나 문제가 생길 가능성이 높다. 작업하던 디렉토리를 삭제하거나, 파일을 잘못 고치거나 또는 잘못 복사하는 등 많은 문제가 생길 수 있다.


1-2. 로컬 버전 관리 시스템 (Local Version Control Systems)

디렉토리 버전 관리의 단점을 보완하기 위해 처음 사용된 VCS(Version Control System)가 바로 로컬 VCS이다.
로컬 VCS는 아주 간단한 데이터베이스(Database)를 사용해서 파일의 변경 정보를 관리한다.

로컬 버전 관리 시스템(Local Version Control Systems)은 데이터베이스(Database)를 통해 디렉토리 버전 관리의 단점을 보완했다. 하지만 프로젝트를 진행하는 등 다른 개발자와 협업이 필요한 작업에는 적합하지 않다.


1-3. 중앙집중식 버전 관리 시스템 (Centralized Version Control Systems)

협업 문제를 해결하기 위해 개발된 것이 중앙집중식 버전 관리 시스템(CVCS, Centralized Version Control System)이다.
CVCS는 파일을 관리하는 서버를 별도로 두고, 클라이언트가 중앙 서버에서 파일을 받아서 사용한다.

중앙집중식 버전 관리 시스템(Centralized Version Control Systems)은 관리자에 의한 서버 관리가 가능하며 쉽게 협업할 수 있다는 장점이 있다. 하지만 이 방법에도 치명적인 결함이 하나 있는데, 그것은 바로 중앙 서버에 문제가 발생하면 아무도 작업을 수행할 수 없다는 것이다. 또한 중앙데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃을 수 있다.


1-4. 분산 버전 관리 시스템 (Distributed Version Control Systems)

중앙집중식 버전 관리 시스템의 결함을 보완하기 위해 개발된 것이 바로 분산 버전 관리 시스템 (DVCS, Distributed Version Control Systems)이다. DVCS는 파일을 관리하는 서버가 따로 존재할 뿐 아니라 저장소를 로컬 컴퓨터에 복사하여 사용한다.

분산 버전 관리 시스템 (DVCS, Distributed Version Control Systems)은 서버에 문제가 생기더라도 복사본의 데이터를 이용하여 다시 작업을 시작할 수 있다. 또한 대부분의 DVCS 환경에는 리모트 저장소가 존재한다. 사람들은 이 저장소를 이용하여 다양한 방법으로 협업을 할 수 있다.

( 참고 문헌 : https://git-scm.com/book/ko/v2 (Git Book) )

2. Git의 특징


  • 소스코드의 교환 없이 동일 파일을 여러 명이 같이 작업하는 등 병렬 개발이 가능하며, 버전 관리가 용이하다.
    ( 브랜치(Branch)를 이용하여 개발하고, 원하는 시점에 합치는(Merge) 방식을 이용할 수 있다.)
  • 파일을 commit 단위로 관리하여 체계적인 관리가 가능하며, 원할 때 지난 시점의 소스코드로 점프(Checkout)가 가능하다.
  • 분산 버전 관리로 로컬에서 개발이 가능하며, 중앙 저장소에 문제가 생겨도 작업 및 복원이 용이하다.
  • Git을 통해 버전 관리를 체계적으로 할 수 있으며, 프로그램이나 패치를 간단하게 배포할 수 있다.

3. Git 관련 주요 용어


Git을 사용하는데 있어 자주 사용되는 용어들을 알아보자.


3-1. 저장소 (Repository)

파일이 저장되는 저장소이다, 파일이 저장되는 위치에 따라 로컬 저장소(Local Repository)원격 저장소(Remote Repository)로 나눌 수 있다.

아래 그림과 같이 Remote 저장소에서 파일을 가져오고(Clone), Commit을 통해 Local 저장소에 저장할 수 있다. Push를 하면 Remote 저장소에도 저장이 가능하다.


3-2. 에어리어 (Areas)

출처: https://support.nesi.org.nz/hc/en-gb/articles/360001508515-Git-Reference-Sheet
  • Working Area ( Working Directory )
    :지금 현재 작업중인 Area(Directory)를 의미한다.
  • Staging Area
    : Working Directory에서 추가된 파일이 저장되는 임시 저장 영역이다. 이곳에서 선별적으로 선택하여 Local Repository에 저장할 수 있다.
  • Repository Area ( Commit Area )
    : Staging Area에서 Commit된 파일들이 저장되는 Repository이다. 파일의 수정사항에 대한 스냅샷(Snapshot)을 가지고 있다. Push를 통해 Remote Repository에도 저장할 수 있다.

3-3. 에드 (Add)

Working Directory에서 작업한 내용을 Staging Area에 추가해준다. Staging Area에서 선별적으로 원하는 파일을 저장소에 commit할 수 있다.


3-4. 커밋 (Commit)

Staging Area에 추가된 내용중 선별적으로 선택하여 Local Repository에 저장하는 과정 이다. 각각의 commit에는 commit에 대한 정보(날짜, 시간, 제목, 내용 등)를 같이 저장할 수 있다.


3-5. 푸쉬 (Push)

Local Repository에 있는 파일을 Remote Repository에 저장하는 과정이다. commit을 통해 저장한 스냅샷을 그대로 원격 저장소에 저장하여 관리할 수 있다.


3-6. 풀 (Pull)

Push와 반대로 Remote Repository에 있는 내용을 가져와 Local Repository에 저장하는 과정이다. 이를 통해 다른 사람이 Push한 내용을 가져와서 작업을 이어갈 수 있다.


3-7. 태그 (Tag)

Commit의 쉽게 접근할 수 있도록 붙여놓은 이정표이다. 태그를 통해서 쉽게 체크아웃을 이용할 수 있다.


3-8. 체크아웃 (Checkout)

특정 시점의 commit으로 이동하는 것을 의미한다. 체크아웃을 통해 과거의 여러 commit을 확인할 수 있으며 branch 생성 및 삭제, 수정 등 다양한 작업을 할 수 있다.


3-9. 브랜치 (Branch)

Commit을 기준으로 구분된 파일을 분기로 나누어 새로운 commit을 만들 수 있는 가지, 가지들의 모임을 브랜치(Branch)라고 한다.

출처: https://www.w3docs.com/learn-git/git-branch.html

브랜치중 주축이 되는 브랜치를 마스터 브랜치(Master Branch)라고 부른다. 모든 브랜치는 마스터 브랜치에서 분기되고 최종적으로 마스터 브랜치에 병합(Merge)된다. 브랜치를 통해 다양한 시도가 가능하며 병합(Merge)기능을 통해 Master에 수정사항을 반영할 수 있다.


4. 정리


Git은 분산 버전 관리 시스템이며 우리가 사용하는 파일들의 버전을 쉽게 관리할 수 있게 해준다.
이를 통해 파일들을 체계적으로 관리할 수 있으며, 병렬 개발을 통해 다른 사람과 쉽게 협력할 수 있다.

우리는 이렇게 간단하게 Git의 정의와 특징, 관련된 용어들을 알아보았다.
이를 토대로 다음에는 Git 사용법과 원격저장소인 Github에 대해서 알아보자.

profile
developer junior

0개의 댓글