본문 바로가기
CS

Git이란?

by yjohbjects 2023. 4. 1.

Git이란?

리눅스 개발자 리누스 토르발스에 의해 개발된 분산 버전관리 시스템(DVCS, Distributed Version Control Systems)

변경 사항을 추적하고, 여러 명의 사용자들 간에 파일에 대한 작업을 조율하는데 사용

여러명의 개발자가 하나의 소프트웨어 개발 프로젝트에 참여할 때, 소스 코드 관리를 하는데 주로 사용

 

여기서 말하는 버전 관리란?

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

 

버전 관리의 종류

로컬 버전 관리(LVCS, Local Version Control System)

RCS(Revision Control System)으로 Patch Set(파일에서 변경되는 부분)을 관리

특별한 형식의 파일로 저장하여 Patch Set을 적용하여 특정 시점으로 돌릴 수 있다.

 

중앙집중식 버전 관리(CVCS, Centeralized Version Control Systems)

파일을 관리하는 서버가 별도로 존재. 

클라이언트가 중앙 서버에서 파일을 받아서 사용

수년간 많은 개발자들이 CVCS 방식을 사용했다.

LVCS에 비해 누가 무엇을 하고있는지 알 수 있기 때문에 관리자가 더 꼼꼼히 관리할 수 있음

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

결함: 중앙 서버에 문제가 발생한다면 아무도 다른 사람과 협업할 수 없으며, 백업도 할 수 없다. (모든 걸 잃을 수 있는 위험이 존재함)

 

분산 버전관리 시스템(DVCS, Distributed Version Control Systems)

분산 버전 관리는 저장소를 히스토리와 더불어 통째로 복제

서버에 문제가 생기면, 이 복제물로 다시 시작할 수 있음

클라이언트 중 아무거나 골라도 서버를 복원 가능

복제물은 모든 데이터를 가진 각각의 백업

 

 

그렇다면 Git은?

Git은 분산 버전 관리 시스템의 일종이다

깃은 형상 관리 도구로도 불린다.

주로 소프트웨어를 개발하는 소스 코드를 효과적으로 관리할 수 있게 도와주는 무료 오픈 소프트웨어

 

DVCS의 일종이기 때문에 중앙 저장소가 손상되어도, 로컬 저장소를 이용하여 복구가 가능

또한 로컬에서 개발이 진행 가능하기 때문에 인터넷 연결이 필요하지 않으며, 각각의 개발자들이 브랜치를 통해 개발한 후 합치는 방식으로 진행되어, 협업도 쉬어진다.

 

깃의 특징

Brancing and Merging

브랜치와 머지라는 개념

나무에서 갈래로 가지가 뻗어나는 것 처럼, 소스코드도 여러개의 가지를 뻗친다.

새로운 아이디어 적용, 버그 픽스, 이전 버전 복구, 패치 적용, 등 여러가지 브랜치를 만들 수 있으며, 이것들을 머지(병합)할 수 있다.

 

Small and Fast

깃은 빠르다. 거의 모든 동작이 로컬에서 진행되기 때문에 다른 VCS처럼 서버와의 통신에 많은 비용을 들이지 않아도 된다. 또한, 깃은 C언어로 작성되어있어 속도가 빠르다. 깃의 주요 디자인 목표가 속도와 성능이라고 한다.

 

Distributed

깃은 분산되어있다. 사용자는 전체 저장소를 복제(clone)해서 로컬 저장소로 가져온다

수많은 백업 파일들이 분산 저장되어있다는 뜻

따라서 중앙 저장소의 장애를 극복하기 쉬워진다.

 

Data Assurance

데이터가 변질되지 않을 것을 보장한다

 

Staging Area

다른 시스템들과 다르게 깃은 'staging area'라는 것을 사용

커밋이 일어나는 곳으로, 커밋이 일어나기 전 검증할 수 있는 곳이기도 하다

커밋은 이 staging area에서 repository로 파일을 보내는 것을 의미

이 때 staging area는 변한 파일과 변하지 않은 파일을 구분하고 추적하고있기 때문에 변화가 있는 파일만 빠르게 골라내어 커밋할 수 있다.

 

Free and Open Source

깃은 무료

오픈소스이기 때문에 누구든 사용 가능

 

 

깃에서의 버전 관리 개념

3가지 공간

작업트리 (working tree)

- 현재 접속하고있는 작업용 디렉토리

- 실제 수정 작업이 이루어지는 공간

 

스테이징 영역 (staging area)

- 작업 트리에서 수정된 파일을 여기로 옮겨서 대기시키는 공간

- 버전을 올리고 싶은 파일만 여기로 넣어 둔다.

 

저장소 (repository)

- 스테이징 영역에서 대기하고 있던 파일들이 버전이 올라가면서 저장되는 공간

 

예를 들면,

README.md를 수정하여 버전 업을 하고싶다면,

1) 작업트리에서 README.md 파일 수정작업 진행

2) 파일 수정 완료 후 add 명령어를 통해 스테이징 영역으로 이동

3) 최종적으로, commit 명령어를 통해 스테이징 영역에서 저장소로 저장하게 된다.

 

 

https://backlog.com/git-tutorial/kr/intro/intro1_1.html

https://git-scm.com/book/ko/v2

https://techblog.woowahan.com/2553/