본문 바로가기

4. 개인 취미 생활

[51] Git을 알아보자(1) - 기본 개념

Git이란?

어렸을 때  파랜드 택틱스, 삼국지 조조전 같은 게임을 하다보면 게임이 뜻대로 풀리지 않아 게임오버 되는 경우가 있었다.

이 경우 처음부터 다시 해야하는 불상사가 생기게 되는데...

다행이도 맨 처음이 아닌 괜찮았던 중간 상황으로 돌아갈 수 있는 방법이 있었다.

그것이 바로 "세이브 & 로드" 신공!

적당히 좋은 상황에서 부지런히 세이브를 해둔 후, 뜻대로 풀리지 않는 상황에 마주하였을 때 좋았던 세이브 파일을 로드하여 좋았던 분위기를 이어나간다.(뜻대로 안 풀릴 경우, 될 때까지 세이브 & 로드를 반복한다.)

그러나 게임에서 제공하던 세이브 공간은 제한적이었으므로 이를 효율적으로 사용하기 위해 세이브할 상황을 잘 파악하는 능력이 필요했다.(잘못 저장하였다간 안 좋은 상황을 강제로 로드해야하는 상황이 연출되기도...)

 

이제는 게임이 아니지만 과거의 좋았던 상황으로 돌아가야할 일들이 종종 생긴다.

코드를 작성하다가, 글을 쓰다가, 이미지를 디자인하다가 등등등

이를 위해서 우리는 수시로 "다른 이름으로 저장" 버튼을 눌러 좋았던 분위기를 "세이브"한다.

그리고 작업 도중 무언가 잘못되었음을 깨달았을 때 우리는 좋았던 분위기를 "로드"한다.

 

이 작업을 효율적으로 도와주는 것이 바로 버전 관리 시스템!

그리고 그 버전 관리 시스템 중 일인자가 Git이다.

이 Git은 과거로 돌아가고픈 우리를 위해 제대로 만들어진 "세이브 & 로드" 시스템이다!

 

https://ko.wikipedia.org/wiki/깃_(소프트웨어) 

 

깃 (소프트웨어) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 깃저장소 생성, 파일 추가, 원격 동기화를 표시하는 터미널 창원저자리누스 토르발스[1]개발자주니오 하마노(Junio Hamano), 리누스 토르발스 등[2]발표일2005년 4월

ko.wikipedia.org

 


 

스택오버플로우 조사 결과(2022) - 버전 컨트롤 시스템 부문

1. 전체 응답의 93.87%가 버전 컨트롤을 위해 Git을 사용하고 있다고 응답하였다. 거의 독점 수준!

2. Git을 사용할 때 커맨드라인으로 사용한다는 응답이 83.57%, GUI를 이용한다는 응답이 20%대로 대부분 터미널을 이용함.

3. 버전 컨트롤 플랫폼으로는 GitHub가 1위를 차지, 그 뒤로 GitLab, Bitbucket이 뒤를 이음.

4. 결론! 개발자라면 버전 관리를 위해 Git을 능숙하게 사용할 줄 알아야 한다!

https://survey.stackoverflow.co/2022/#technology-version-control

 

Stack Overflow Developer Survey 2022

In May 2022 over 70,000 developers told us how they learn and level up, which tools they’re using, and what they want.

survey.stackoverflow.co

 


 

버전 관리 시스템(VCS)의 역사

1. 버전 관리 시스템(Version Control System, VCS)이 없었을 때는 버전 별로 수동으로 폴더를 나누어 관리하였다.

2. 이후 서버에서 버전을 관리하는 CVS(Centralized Version Control)가 등장하였다.(CVS, SUBVERSION, PERFORCE)

3. 그러나 CVS는 서버에 문제가 생기거나 인터넷이 안되는 상황에서는 사용이 불가능하였다.

4. 이를 개선하기 위해 모든 개발자들이 버전에 대해 동일한 히스토리를 가지는 DVS(Distributed Version Controlr)가 등장하였다.(Git, Mercurial, Darcs)

5. 각자의 버전에 대한 히스토리를 공유하기 위해 cloud 서비스가 등장하였다.(GitHub, GitLab, Bitbucket)

 

Git의 탄생

1. 리눅스 커널 팀에서 버전 관리를 위해 당시 무료였던 Bitkeeper라는 버전 관리 시스템을 도입하였다.

2. 그러나 얼마 후 BitKeeper의 Lary McVoy는 유료화를 선언하였다.

3. 이에 리눅스 커널의 창시자인 Linus Torvalds는 개선된 버전 관리 시스템인 Git을 만들게 되었다.(2005)

4. 기존의 버전 관리 시스템은 각각의 버전마다 변경된 내용들만 가지고 있는 delta-based였다.

5. delta-based의 단점은 버전을 이동할 때 변경된 사항들을 계산하느라 시간이 많이 걸렸다.

6. Git은 delta-based가 아니라 전체적인 내용을 snapshot으로 가지고 있도록 만들어졌다.

7. 각 버전을 snapshot으로 관리하기 때문에 버전이나 브랜치 간 이동이 빠르다.

8. snapshot은 변경되지 않은 부분은 이전 파일의 링크를 가지고 있기 때문에 가볍다.

 

https://youtu.be/lPrxhA4PLoA

 


 

Git 용어 정리(명령어)

git init

저장소(repository)를 만듭니다. Git을 이용하기 위해 맨 처음 사용합니다.

 

git status

현재 상태를 확인합니다. 상태에는 크게 두 가지(Untracked와 Tracked)로 나뉩니다. 그 중 Tracked는 또 세 가지(Unmodified, Modified, Staged)로 나뉩니다.

 

git add

파일의 변경사항을  Staging Area에 추가합니다. 이 파일들은 Staged 상태가 되며, 이는 곧 Commit할 것이라고 표시한 상태를 뜻합니다.

 

git commit

데이터를 로컬 데이터베이스(Repository)에 저장한다. -m 옵션을 이용하여 메시지를 작성하여 같이 저장한다.

 

git log

과거 이력을 확인합니다.

 

git reset

원하는 이전 상태로 되돌립니다. 되돌린 상태 이후의 이력들은 사라집니다. 옵션에 따라 변경 내용까지 모두 지워지기도 하고 Unstaged 상태로 돌리기도 합니다.

 

git revert

원하는 이전 상태를 새로운 커밋으로 추가합니다. 되돌린 상태 이후의 이력들은 이전 커밋에 남아있으므로 나중에 왜 되돌아갔는지 확인이 가능합니다.

 


 

공식 가이드북

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

 

Git - Book

 

git-scm.com