본문 바로가기

코딩도 합니다/Git

[깃 Git] git의 영역 정리(working directory, staging area, repository) / git의 상태 정리(untraked, tracked, staged, unmodified, modified)



안녕하세요.

디자인도 하고, 개발도 하는 '디발자 뚝딱'입니다.

 

이번 포스팅에서는 working directory, staging area, repository의 개념을 정리해보겠습니다.

개발자라면 이 3가지 영역을 잘 이해해야 Git을 다루기가 쉽다고 해셔 제가 낱낱이 파헤쳐봤는데요.

그 내용을 공유해드릴게요.

 

지금부터는 가독성을 위해 문어체를 사용하겠습니다!

 

 

  Git의 3가지 영역 정리

working directory

  • working tree라고 말하기도 함
  • 현재 작업하고 있는 영역. 즉, 작업을 하고 있는 프로젝트 디렉토리
  • 아직 추적(track)하고 있지 않은 상태

staging area

  • index라고 하기도 함
  • $git add 명령어로 전달한 파일들이 존재하는 영역
  • commit을 하게 되면 staging area에 있는 파일들만 commit에 반영됨

repository

  • working directory의 변경 이력들이 저장되어 있는 영역
  • commit들이 모여있는 저장소

 

🤚🏻 잠깐만요, 그렇다면 이 영역들의 역할은?

1. working directory에서 뭔가를 작업하고

2. 작업한 파일들을 $git add

3. commit하면 staging area에 있던 파일들이 repository에 저장됨

 

 

 

 

 

  Git의 상태 정리

Git에서 파일들은 크게 2가지 상태로 나뉘는데요.

 

1. untracked 상태

  • untracked는 '추적되지 않고 있는'이라는 뜻
  • 파일이 Git에 의해서 그 변동사항들이 추적되지 않고 있는 상태
  • working directory에 있는 파일이지만 Git으로 버전관리를 하지 않고 있는 상태

=> 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않았다면 untracked 상태

 

 

2. tracked 상태 (파일이 Git에 의해 그 변동사항이 추적되고 있는 상태)

(1) staged 상태

  • staged는 '스테이징된, stage area에 올려진'이라는 뜻
  • 파일의 내용이 수정되고나서, staging area에 올라와 있는 상태

=> 새로 생성한 파일에 내용을 쓰고 $git add 명령어 실행했거나, 한번이라도 commit에 포함됐었던 파일의 내용을 수정하고 $git add를 실행하면 이 상태 

 

 

(2) unmodified 상태

  • unmodified는 '수정되지 않은, 변한 게 없는'이라는 뜻
  • 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 전혀 바뀐 게 없는 상태
  • commit을 하고 난 직후에는 working directory 안의 모든 파일들이 이 상태가 됨

 

(3) modified 상태

  • modified는 '수정된'이라는 뜻
  • 최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태

 

 

3. 이미지로 한 눈에 정리하기

git 상태 정리

1. Add the file

untraked 상태의 파일을 처음으로 $git add 해주면 Staged 상태가 된다.

 

2. Edit the file

최신 커밋과 비교했을 때 차이가 없는 unmodified 상태의 파일의 내용을 수정하면 modified 상태가 된다.

 

3. remove the file

파일을 삭제하면 당연히 Git 에서 더이상 인식하지 않는다.

 

4. Stage the file

modified 상태의 파일을 $git add 해주면 staged 상태가 된다.

 

5. Commit

commit을 하면 staging area에 있던 파일들이 커밋에 반영되고, 이제 모든 파일들은 최신 커밋과 차이가 없게 되니까 unmodified 상태가 된다.

 

 

 

 

 

 

 

728x90