본문 바로가기
Git&GitHub

[Git & GitHub] Git & GitHub란 무엇인가

by dong_seok 2023. 8. 9.

Git버전 관리를 도와주는 소프트웨어로, 버전 관리 시스템(Version Control System, VCS)입니다.

우리는 깃을 이용해 버전을 만들고 되돌리며, 다른 개발자들과 협업 할 수도 있습니다. 깃은 리눅스의 아버지 리누스 토르발스가 전 세계 수많은 개발자와 함계 오픈 소스 프로젝트(리눅스 커널)를 진행하다가 버전 관리에 어려움을 느껴 만든 도구입니다. 깃 또한 오픈 소스 프로젝트로, 모든 소스 코드가 공개되어 있습니다.

 

GitHub원격 저장소 호스팅 서비스를 말합니다. 간단히 말하면 깃으로 버전을 관리하는 프로젝트들이 모여 있는 웹 사이트 라고도 말할 수 있습니다. 우리는 우리가 만든 프로젝트들을 깃을 통해 깃허브에 업로드 할 수 도 있고, 깃허브에 업로드한 프로젝트에 새로운 버전을 추가할 수도 있습니다. 또한 자신의것뿐만이 아니라 깃허브에 업로드 되어있는 전 세계 개발자들의 프로젝트를 우리들의 컴퓨터로 다운로드 할 수도 있습니다. (꼭 깃허브가 아니어도 Sourcetree도 있음)


깃을 사용해야 하는 이유

1. 변경 내역을 확인하기 어렵다

보통 파일을 저장할때 이전에 저장된 내용에서 현재 내용으로 덮어쓰게 됩니다. 그러면 자연스럽게 저장된 파일은 항상 최신 상태만 갖게 됩니다. 하지만 이렇게 되면 현재 저장된 내용이 이전에 비해 무엇이 어떻게 달라졌는지 알기 어렵습니다. 파일이 달라질때마다 매번 다른 이름으로 따로 파일을 저장하여 관리하는 방법도 있지만, 저장 공간을 낭비하는 일일 뿐 아니라 쉽게 실수할 수도 있기 때문에 좋은 방법은 아닙니다.

 

2. 버전을 되돌리기 어렵다

위에서 말한 방식으로 파일을 저장하게 될 경우 특정 시점으로 파일을 되돌리기가 쉽지 않습니다. 우리는 개발을 할때 예상치 못한 상황에 직면할 수 있고 그에 대비 해야합니다. 예를 들면 어떤 기능을 추가한다던가 디자인을 변경하게 된다고 했을때 우리는 당연히 코드를 추가,수정,삭제 할것입니다. 그런데 만약 기능이나 디자인이 어울리지 않아서 이전에 만든걸로 바꾸자고한다면 파일의 어느 부분이 삭제 됐고, 어느 부분을 어떻게 되돌려야 할 지 파악하기 어려울 것입니다. 다시 말하면  이전 버전으로 돌아가기가 어렵습니다.


이제 깃과 깃허브가 무엇인지, 그리고 사용해야 하는 이유를 알았으니 버전이 어떻게 만들어지는지와 버전을 어떻게 관리할 수 있는지를 알아보도록 하겠습니다. 버전이 만들어지는 과정을 이해하기 위해서는 선행으로 깃이 관리하는 세가지  공간에 대해 알아볼 필요가 있습니다.

깃이 관리하는 세 공간

1. 작업 디렉터리 or 작업 트리(working tree)

버전관리가 필요한 프로젝트의 디렉토리로 이동한 후 git init의 명령어를 사용하게 되면 하위 디렉토리로 .git 이라는 숨김 폴더가 생성 됐을 것입니다. (git init : 버전관리를 하지 않는 기존 디렉토리(프로젝트)를 git으로 관리하겠다는 명령어)

.git 숨김 폴더가 놓여 있는 곳이 우리의 프로젝트가 위치할 공간입니다. 이 공간을 작업 디렉터리 또는 작업 트리라고 합니다. 그리고 우리는 깃을 이용해서 작업 디렉터리 내에 위치한 파일 및 폴더의 현재 상태를 버전으로 만들고, 만들어진 버전을 관리 할 수 있습니다. 즉 작업 디렉터리는 버전 관리의 대상이 위치하는 공간입니다. 작업 디렉터리에 있는 프로젝트에 새로운 파일이 추가되거나 수정,삭제 하는 등의 변경 사항이 생기면 이것을 감지하고 새로운 버전을 만들 수 있게 됩니다.

 

.git (프로젝트 공간에 같이 위치)

2. 스테이지 or 인덱스(index)

위에서 말한 변경사항이 굉장히 많을 수 있습니다. 그렇다면 이러한 변경사항들을 모두 새로운 버전으로 만들어야 할까요? 꼭 그렇지는 않습니다. 임시로 변경했을 수도 있고 실수로 변경 했을 경우도 있고 단순히 새로운 버전에 포함시키고 싶지 않을 수도 있습니다. 그래서 깃으로 버전을 만들 때는 작업 디렉터리 내에서 변경된 파일들 중에서 새로운 버전이 될 파일만 특별한 공간으로 옮기는 작업을 거치게 됩니다. 이 특별한 공간이 바로 스테이지 입니다. 즉 스테이지는 다음 버전이 될 후보가 올라가는 공간 이라고도 할 수 있습니다. (git add 명령어를 통해 이루어집니다.)

3. 저장소(repository)

스테이지에 올라갈 파일들을 다 정했다면 이제는 이 파일들을 새로운 버전으로 만들 차례입니다. 스테이지에 있는 파일을 바탕으로 새로운 버전을 만들면 새 버전이 저장소에 추가됩니다. 작업 디렉터리에서 만들어진 모든 버전들의 내역이 저장소에 있습니다. 즉, 저장소는 버전이 만들어지고 관리되는 공간입니다. 새로운 버전을 만들게 되면 스테이지는 깨끗하게 비워지게 됩니다. (git commit -m [버전명] 명령어를 통해 이루어집니다.)

 

*참고 : 스테이지와 저장소는 작업 디렉터리와 다르게 명시적으로 보이지 않습니다.*

git의 세가지 공간

위에서 말한 과정을 그림으로 표현한 것입니다. Remote Repository 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소(GitHub)를 말하는데 commit 과정을 통해 버전이 관리되는 저장소는 Local Repository로 내 PC에 파일이 저장되는 개인 전용 저장소입니다. 이 개인 저장소에 있는 버전들을 깃허브에 업로드하기 위해서는 git push 명령어를 통해 Remote Repository로 저장해주어야합니다.

 

참고자료

모두의 깃&깃허브 - 강민철 지음

 

 

'Git&GitHub' 카테고리의 다른 글

[Git & GitHub] Branch와 Merge 과정  (2) 2024.02.26
[Git & GitHub] Git 명령어  (0) 2023.08.10

댓글