본문 바로가기
Development/ETC

Git의 Stage 영역 이해하기 : working directory, stage, repository

2023. 3. 8.

해당 포스팅은 "모두의 깃 & 깃허브" 책을 읽고 정리한 내용입니다.

 

모두의 깃&깃허브 - YES24

`여러 사람과 협업하고 있는데, 코드 관리는 어떻게 해야 하지?``내 코드를 예전 버전으로 되돌리고 싶어!``코드를 백업하고 싶어. 그리고 여러 버전으로 나누어 관리하는 기능도 필요해!`557개 일

www.yes24.com

 


 

여러 명이서 협업을 하면서 코드를 구현할 때 깃은 필수적인 요소입니다. 팀원 각각이 진행할 작업 내용을 분리하고, 변경 내용을 확인하고, 각각을 합치고, 필요하다면 구현 내용을 되돌릴 수도 있습니다. 즉, 버전 관리를 위해 많은 개발자들이 사용하는 툴입니다. 

 

보통 코드를 수정하고 나서 해당 수정 내용을 커밋으로 올리기까지는 다음의 3가지의 과정을 거치게 됩니다. 

 

VS code 등에서 개발 진행 → 변경 사항 생성

git add [파일 이름] 

git commit -m [커밋 메시지 제목] -m [커밋 메시지 본문]

 

커밋을 만들기 위한 단계가 이렇게 세 단계로 나뉘어 지는 것은 깃이 작업 디렉터리(wording directory), 스테이지(stage), 저장소(repository)라는 총 3개의 작업 공간을 관리하기 때문입니다. 이 3가지 공간들을 활용하고 거쳐서 커밋, 즉 <버전>을 생성하고 관리할 수 있게 되는 것이죠. 

 

작업 디렉터리(working directory) = 작업 트리(working tree)

작업 디렉터리는 우리가 개발하는 프로젝트가 위치하는 공간입니다. 즉, 개발하고 있는 소스 파일이 위치해 있는 폴더(directory)라고 생각하면 됩니다. 우리가 코드를 수정하고, 새로운 파일이나 폴더를 생성하는 것 모두 이 작업 디렉터리에서 일어나는 일 입니다.

 

  • 우리가 개발하는 프로젝트가 위치하는 공간 즉, 버전 관리의 대상이 위치하는 공간
  • .git 이라는 숨김파일이 존재하게 된다
  • 버전(커밋)을 만든다는 것은 곧 특정 작업 시점에서의 변경 사항을 저장하겠다는 뜻
  • 이때, 작업 디렉토리에 있는 모든 변경사항이 모두 새로운 버전이 될 필요는 없으며, 이 중 <다음 버전으로 만들 후보>를 선별하여 새로운 버전으로 만들면 된다

 

스테이지(stage) = 스테이징 영역(staging area) = 인덱스(index)

스테이지 영역은 작업 디렉터리와는 달리 저희 눈에 명시적으로 보이지는 않습니다. 이 공간에는 위에서 말한 <다음 버전이 될 후보>가 올라가는 공간입니다. 

 

  • 작업 디렉터리에서 스테이지 영역으로 파일을 옮기는 것을 <스테이지에 추가(add)한다>고 표현한다
  • 스테이지에 추가된 파일은 add된 파일이라고 부를 수 있으며, <git add> 명령어를 통해 파일을 스테이지 영역으로 옮길 수 있다
  • 한 번도 add된 적 없거나, commit 된 적 없는 파일은 <untracked 상태에 있는 파일>이라고 부른다

 

저장소(repository)

저장소에는 버전(커밋)들이 기록됩니다. 즉, <다음 버전이 될 후보>들을 모아 새로운 <버전>을 만들 수 있는데, 이 <버전>이 올라가는 공간인 것이죠. 

 

  • 버전이 만들어지고 관리되는 공간
  • 저장소에 새로운 버전을 만드는 것을 <커밋(commit)한다>고 표현함
  • 스테이지에 올라간 버전 후보들이 커밋되어 저장소 영역으로 올라가면, 해당 스테이지 영역을 비워짐

 

 

(+α) .git ignore

이렇게 만들어진 버전들은 repository에 저장되고, 다른 팀원들은 해당 버전을 pull 해오거나 picking 하는 등의 행동을 통해 해당 버전의 내용을 확인할 수 있습니다. 다만, 작업을 하다 보면 이렇게 다른 외부 사람들에게 공개하고 싶지 않은 파일들이 생길 수 있습니다. 버전 관리 대상에서 제외하고 싶은 것이죠. 

이런 파일들은 .git ignore 파일에 명시하여 버전 관리 대상에서 제외할 수 있습니다.

 

  • <git status> 명령어를 입력하면 작업 디렉터리에 있던 파일 중 stage 영역에 올라갈 수 있는 상태의 파일들이 나열된다
  • 이때, .gitignore에 파일명 혹은 폴더명을 명시해 놓았다면 해당 파일은 이 리스트에서 제외된다
  • 즉, git이 알아서 해당 파일을 무시한다

 


 

 

저도 팀 프로젝트를 진행하면서 깃을 활용하고 있습니다. 깃이 익숙치 않은 팀원에게 도움이 될 수 있도록 필요한 내용을 문서로 정리하고 있는데요. 이 포스팅은 정리하고 있는 문서의 가장 앞부분에 해당하는 내용인만큼 깃의 기초가 되는 부분입니다. 다만 저도 이렇게 확실히 짚고 넘어간 건 처음인 것 같네요. ㅎㅎ 더불어 위에서 활용한 이미지들은 모두 책을 통해 공부한 내용을 기반으로 제가 제작한 이미들이니 참고 부탁드립니다. 

 

'Development > ETC' 카테고리의 다른 글

git add -p | git add 코드 내용 단위로 실행하기  (3) 2023.01.26
Github default branch 변경하기  (0) 2023.01.11

댓글