Profile picture

[Git] Git의 3가지 작업 영역

JaehyoJJAng2022년 03월 01일

3가지 작업 영역

  • Working Directory: 현재 내가 작업하고 있는 프로젝트 폴더(디렉토리)
  • staging area: git add를 한 파일들이 존재하는 영역.
    • 커밋을 하게되면 staging area에 있는 파일들만 커밋에 반영됨
  • repository: working directory의 변경 이력들이 저장되어 있는 영역.
    • 커밋들이 저장되는 영역

요약하면

작업한 파일들을 git add 로 staging area 에 추가해주고, 커밋을 하면 staging area에 있던 파일들의 모습이 마치 영화의 한 장면 마냥, 스냅샷이 되어 repository에 저장됨

image (출처 : 코드잇)

왼쪽부터 순서대로

  1. working directory
  2. staging area
  3. repository

가 있고 다음과 같은 작업을 한 상태를 나타냄

  • working directory에서 A.txt 파일과 B.txt 파일을 작성하고
  • git add A.txt 와 git add B.txt 를 실행해서 A.txt , B.txt 모두 staging area에 올림
  • 그 다음 git commit -m "Ver_1" 명령어로 staging area에 있는 파일들을 가져와 커밋으로 남김

image

이번에는

  1. working directory에서 A.txt 파일 내용에 Python~ 이라는 단어를 추가하고
  2. B.txt 파일 내용에 Morning! 이라는 내용을 추가

이번에는 B.txt 파일만 staging area에 올릴 것임

$ git add B.txt

추가하고 커밋

$ git commit -m "UPD"
  1. A.txt는 staging area에 있던 모습, 그러니까 수정하기 이전의 모습이 Ver_2 커밋에 반영되었고

  2. B.txt도 staging area에 있던 모습, 하지만 A.txt와는 달리 수정한 이후의 모습이 Ver_2 커밋에 반영되었음.

A.txt, B.txt 둘다 working directory에서 수정했다는 사실은 같지만,

staging area에 올렸는지 여부에 따라 그 최신 모습이 커밋에 반영되는지가 달라짐.

바로 이 점이 Git을 사용할 때 잘 알고 기억해야하는 부분

그런데 staging area가 굳이 왜 필요할까?

working directory에서 작업을 하고 git add할 필요없이 바로 커밋해버리는 구조가 더 편할 것 같은데. 하지만 꼭 그렇지는 않다.

방금처럼 A.txt와 B.txt 파일을 둘다 수정했더라도 두 파일 모두 그 최신 모습을 다음 커밋에 반영하고 싶지 않을 수도 있음.

방금처럼 B.txt의 최신 모습만 그 다음 커밋에 반영하고 싶을 수도 있는 것.

만약 staging area가 없다면 원하는 것들만 선별적으로 커밋에 반영할 수 없게 될 것임 그럼 좀더 세밀한 버전 관리를 할 수 없게 되는 거고.

Git File Status

  • Untracked: Working Directory에 있는 파일이자만 Git으로 버전관리 하지 않은 상태
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	test.txt
  • Unmodified: 신규로 파일이 추가된 경유 , new file 상태와 같음
    • git add 한 직후
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   test.txt
  • Modified: 파일이 추가된 이후 해당 파일이 수정되었을 때
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   2022-02-28-git-three-work.md
  • staged: Staging Area에 반영된 상태

image

(출처 : 코드잇)


Loading script...