[Github] git의 3가지 영역과 라이프 사이클

개요

Git은 자신이 작업 중인 파일들을 버전별로 분류하여 체계적으로 관리할 수 있는 소프트웨어다. Git이 관리를 위해 소유하고 있는 영역이 3가지가 있다. Git이 가진 3가지 영역을 알고 있으면, 코드를 잃어버리거나 잘못된 push를 하는 경우가 없을 것이라 기대한다.

Git이 가지고 있는 3가지 영역

Git이 가진 영역은 Working Directory, Git Directory(Repository), Staging Area 이다. 각 작업 영역에서 파일들을 관리하며, 버전 관리를 할 수 있는 환경을 제공한다.

각 영역별로 상세하게 알아보자.

git의 3가지 영역
git의 3가지 영역

Working Directory(워킹 디렉토리)

소스 코드를 작업하는 로컬 영역이다. 코드를 직접 추가, 수정, 삭제 등 작업이 이루어지는 영역을 의미한다.

Working Directory에서 모든 코드 작업을 진행하고, 다른 영역에 저장해야 Git에 기록이 남기 시작한다. 코드 작업만 진행하고 작업된 코드들을 가져와 활용하는 실질적인 업무 영역이다.

Staging Area(스테이징 영역)

워킹 디렉토리에서 Git add 명령을 실행하면 파일들은 스테이징 영역에 저장된다. Git directory에 들어가기 전 소스 코드를 저장소에 넣을 건지 검증을 위한 영역이라 보면 된다. 스테이징 영역에 없는 코드들은 Git directory에 올릴 수 없다.

Git directory(저장소 영역)

저장소 영역은 스테이징 영역에서 commit 한 파일들이 모여있는 영역이다. 로컬 저장소라고 부르기도 하며, 원격 저장소에 가기 전에 개인 Git 저장소에 올려 놓을 때 사용하는 영역이라 생각하면 된다.

Git으로 개발자가 하는 작업

1. 워킹 디렉토리에 파일을 받아온다. 받아올 파일이 없다면 새롭게 만들어 작업 한다.

2. 스테이징 영역에 파일을 올려 Commit 하기 전 스냅샷을 만든다.

3. 스테이징 영역에 있는 파일을 저장소 영역에 Commit 하여 스냅샷을 영구 저장한다.

Git 의 Staging Area는 왜 필요한가?

Staging Area는 왜 필요할까? Git add를 통해 작업한 소스 코드를 올리기 전 저장하는 공간으로 활용한다. 생각해보면, 귀찮은 작업이 한번 늘어 났다는 생각을 할 수 있다. 그냥 Git directory에 올리면 되지 않나?

그런의미에서 Staging Area의 활용처를 알아봤다.

1. 일부분만 커밋할 때 → 여러 코드 작업을 진행 후 Commit 하기 전에 일부분만 하고 싶을 때 Staging Area까지만 올려 놓는다.

2. 충돌을 해결할 때 → 한,두개 충돌이 났을 땐 문제가 없다. 많은 충돌이 나고, 충돌이 발생하지 않은 코드가 섞여있다면, 처리 과정이 복잡해질 수 있다. Staging Area에서 충돌처리를 하게 된다면 충돌이 발생하지 않은 코드는 바로 Commit이 가능하다. 그리고 조금씩 코드를 수정하고 먼저 Commit하여 빠르게 소스 코드를 올려 공유할 수 있다.

3. 커밋 다시하기 → commit —amend 명령으로 커밋을 다시할 때 Staging Area를 활용한다. Commit -amend 명령을 하기 전 추가로 commit에 소스 코드를 포함하려면 git .add를 하면 된다.

File Status LifeCycle

– untracked → git으로 관리하기 이전의 상태를 의미한다. gitdㅔ게 앞으로는 관리하지 않도록 삭제한 상태

– unmodified → git에게 관리를 하라고 add한 상태. 그 상태에서 아직 수정은 하지 않았다. git에게서 pull로 내려받은 상태라고 보면 된다.

– modified → 사용자가 수정을 한 상태를 의미한다. 파일이 추가된 상태에서 수정이 되어야 modified 상태가 된다. 즉 add 되지 않은 파일은 수정해도 modified 상태는 아니다.

– staged → Git의 스테이징 영역에 반영된 상태.

결론

Git의 각 영역을 이해하고, 왜 이러한 영역이 존재하는지 알고 파일을 관리해야 한다.

각 영역은 사용처가 있으며, 순서에 따라 파일들이 이동하고 기록된다.

각 영역과 Life Cycle을 알고 있으면, 순서에 따라 git 명령어를 사용할 수 있을거라 생각한다.

함께 읽으면 좋은글

[Github] Pull Request(PR)

branch와merge 사용 방법

https://iseunghan.tistory.com/322

Leave a Comment