일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스프링 게시판
- arraylist
- 스프링 쇼핑몰 프로젝트
- 스프링 포트폴리오
- Bcrypt
- 정규표현식
- 스프링 파일 삭제
- 스프링 프로젝트 기본 설정
- 스프링 업로드
- 스프링 게시판 구현
- 스프링 HikariCP
- ResponseEntity
- 이미지 출력
- spring 프로젝트
- 쇼핑몰 포트폴리오
- 로그아웃 기능 구현
- 스프링 이미지
- 회원가입 기능
- 스프링 프로젝트
- 인증번호 전송
- spring 쇼핑몰
- 스프링 메일 전송
- 삭제 구현
- 파일 업로드
- BCrypt 적용
- 스프링 프로젝트 설정
- 쇼핑몰 프로젝트
- 스프링 쇼핑몰
- 로그인 기능
- oracle 설치방법
- Today
- Total
Kim VamPa
[Git] git의 3가지 영역, 3가지 상태, 라이프 사이클 본문
목표
Git이 파일들을 어떠한 상태, 단계로 관리하는지를 이해한다.
Git은 자신이 작업 중인 파일들의 변경사항들을 버전별로 분류하여 체계적으로 관리할 수 있도록 해주는 소프트웨어입니다. Git이 파일들의 변경사항을 버전별로 관리하기 위해서 파일들을 어떤 식으로 인식하고, 어떠한 단계로 관리하는지를 이해하는 것이 목표입니다.
순서
1. Git의 3가지 영역(or 단계)
2. Git의 3가지 상태
3. Git 파일의 LifeCycle 관점에서본 4가지 상태
1. Git의 3가지 영역
Git은 Working Directory, Staging Area, Git Directory(Repository) 3가지 작업영역으로 파일들을 관리합니다.
Working Directory : Git이 추적 중인 파일들이 위치하는 영역입니다.
- git init을 통해서 git이 관리하도록 지정된 디렉토리입니다.
- 좀 더 정확히 말하면 지정된 디렉토리에서 .git 디렉토리를 제외한 모든 것(파일, 하위 디렉토리) 입니다.
- 작업한 파일(생성, 수정한 파일)들이 저장되는 곳입니다.
Staging Area : commit 할 준비가 된 파일들이 위치하는 영역입니다.
- 해당 영역은 .git 디렉토리에 단순한 파일로 존재합니다.
- 작업한(수정된) 파일들 중 버전으로 만들고자(commit 하고자) 하는 파일을 저장합니다.
- git에서는 기술용어로써 "Index"라고 부르기도 합니다.
Git Directory(Repository) : 커밋되어 버전을 관리하는 파일들이 위치하는 영역입니다.
- Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳입니다.
- .git 디렉토리가 Git Directory(Repository)입니다.
- 프로젝트의 버전 정보를 관리하기 필요로 한 모든 파일이 저장되어 있습니다.
2. Git의 3가지 상태
Git이라는 소프트웨어는 파일의 변경사항 들을 버전별로 관리하기 위해서 파일들을 Committed, Modified, Staged 3가지 상태로 관리를 합니다. 이는 앞에서 살펴본 3가지 영역과 연관지어 생각해보면 이해가 쉽습니다.
Modified : 수정한 파일을 로컬 데이터베이스에 commit하지 않은 것을 말합니다.
- Working Directory 영역에 있는 파일들 중 수정을 한 파일들의 상태를 의미합니다.
Staged : 수정한 파일들 중 commit 할 것이라고 표시한 상태를 의미합니다.
- Staging Area 영역에 있는 파일들의 상태입니다.
Commited : Staged 상태의 파일들이 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미합니다.
- commit 된 대상 파일은 Working Directory 영역으로 돌아가게 되고 대상 파일의 버전을 관리하는 파일들은 Git Directory(Repository)에 저장된 상태를 말합니다.
- Commited 상태 대상 파일을 수정하게 되면 Modified 상태가 됩니다.
3. Git 파일의 LifeCycle관점에서 본 4가지 상태
앞에선 Git이 파일들을 관리하는 관점에서 파일들을 어떻게 분류하는지를 살펴보았습니다. 이번에는 git에 의해 관리되는 파일들의 라이프사이클 관점에서 파일들의 상태를 살펴보겠습니다. Working Directory에 있는 파일들(Git의 추적 대상이 되는 파일들)은 크게 Tracked 상태와 Untracked 상태로 분류됩니다. Untracked 상태의 파일은 git이 관리를 하지 않는 파일입니다. Tracked 상태의 파일은 git이 관리를 하는 파일입니다. Tracked 상태는 좀 더 세부적으로 Unmodified, Modified, Staged 상태로 분류될 수 있습니다. 정리하면 LifeCycle 관점에서 본 파일들은 Tracked, Unmodifeid, Modified, Staged 4가지 상태 로 분류 됩니다. Git의 파일들은 반드시 해당 4가지 상태중 하나의 상태를 가지게 되고, 4가지 상태를 반복적으로 순환합니다.
Untracked : Working Directory에 존재는 하지만 git이 관리를 하지 않는 파일들의 상태입니다.
- Working Directory에 새롭게 만들어진 파일들이 이에 해당합니다.
- 새로운 파일을 만든 후 git status 명령을 실행하시면 "Untracked fiels : 파일 이름" 문구가 뜹니다. 해당 문구의 파일이 Untracked 상태의 파일을 의미합니다.
Staged : commit 하고자 하는 파일의 상태입니다.
- 위에서 살펴본 Staging Area 영역에 있는 파일의 상태입니다. ( 앞의 2 에서 살펴본 Staged와 같은 개념입니다.)
- Untracked 상태의 파일 혹은 commit 된 이후 수정이 진행된 파일(Modified 상태의 파일)을 git add 명령을 수행하게되면 해당 파일들은 Staged 상태가 됩니다.
- git add 명령 이후 git status 명령을 실행하면 "changes to be committed : 파일이름" 을 볼 수 있는데 해당 문구에 있는 파일이 바로 Staged 상태 파일입니다.
- "changes to be committed"는 'commit(버전화) 될 파일들의 목록' 을 의미합니다.
Unmodified : 수정을 하지 않은 파일 상태입니다.
- Unmodified 상태의 파일은 한 번 이상 commit 된 파일 중 수정을 하지 않은 파일 또는 다른 저장소의 파일들을 clone 하였을 때의 파일들을 의미합니다.
- 앞의 2 에서 살펴본 committed와 같은 개념입니다.
Modified : 수정을 한 파일의 상태입니다.
- Unmodified 상태의 파일을 수정을 하게 되면 Modified 상태 파일이 됩니다.
- Unmodified 상태의 파일을 수정 한 뒤 git status 명령을 실행하면 "changes not statged for commit : 파일 이름" 문구를 볼 수 있습니다. 해당 문구는 Modified 상태의 파일을 의미합니다.
- "changes not staged for commit"의 의미는 Tracked 상태이지만 아직 Staged 상태는 아닌 파일들의 목록을 의미합니다.
REFERENCE
- stackoverflow.com/questions/36201342/git-where-exactly-is-the-working-directory
- git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EA%B8%B0%EC%B4%88
- git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0
- opentutorials.org/course/3839/22592
DATE
- 2020.12.22
'공부 > 기타(설치 등)' 카테고리의 다른 글
[SDKMAN]sdkman 윈도우 설치 및 사용 방법 (8) | 2023.03.22 |
---|---|
[용어정리] 이벤트 핸들러(Event Handler) (0) | 2021.01.11 |
[Git][CLI]git을 사용하는 이유, git 저장소 생성(git init) (0) | 2020.12.09 |
[Linux] 명령어 정리(1)(pwd, cd,cd /, cd ~, cd -, cd .. ) (0) | 2020.12.03 |
[서버]Telnet을 이용한 SMTP 메일 발송 (2) | 2020.08.26 |