nayonngme
1. 버전 관리란? 본문
0. 버전 관리에 대한 기본 개념
.git 숨김 폴더가 있는 곳은 프로젝트가 위치할 공간 = 작업 디렉토리 = 작업 트리(working tree)
ㄴ 깃을 이용해 작업 디렉러리 내에 위치한 파일 및 폴더의 현재 상태를 버전으로 만들고, 만들어진 버전을 관리할 수 있음
ㄴ 즉, 작업 디렉터리는 버전 관리의 대상이 위치하는 공간
'버전을 만든다' = 특정 순간의 변경 사항을 기억한다
ㄴ 따라서 작업 디렉터리에 있는 프로젝트에 변경 사항이 생기는 순간 새로운 버전을 만들 수 있음
모든 변경 사항을 새로운 버전으로 만들 필요는 없음
- 새로 만들 버전과는 관련 없거나, 새로운 버전으로 만들만큼 중요하지 않거나, 임시로 변경했구나, 실수로 변경한 경우 등은 변경 사항이 있더라도 굳이 새로운 버전으로 만들지 않아도 됨
=> 새로운 버전을 만들기 전에 작업 디렉터리 내에서 변경 사항이 생긴 파일 중 '다음 버전이 될 후보를 선별하는 작업'이 중요함
깃으로 버전을 만들 때는 작업 디렉터리 내에서 변경된 파일들 중에서 새로운 변경이 될 파일만 특별한 공간으로 옮기는 작업을 거침
ㄴ 특별한 공간 = 스테이지 = 변경 사항이 있는 파일 중 다음 버전이 될 후보가 올라가는 공간 = 스테이징 영역(staging area) = 인덱스(index)
ㄴ 즉, 버전을 만들기 위해 작업 디렉터리에 있는 파일에 변경 사항을 만드록 이 변경 사항들 중 새로운 버전으로 만들려는 파일을 선택해 스테이지로 옮김
ㄴ 작업 디렉터리는 프로젝트가 위치한 공간으로 눈으로 직접 볼 수 있지만, 스테이지는 명시적으로 보이지 않음
다음 버전이 될 후보들을 스테이지로 모두 옮기고, 스테이지에 있는 파일을 바탕으로 새로운 버전을 만들면 새 버전이 저장소에 추가됨
ㄴ 작업 디렉터리에서 만들어진 모든 버전들의 내역이 저장소에 있음
ㄴ 즉, 저장소는 버전이 만들어지고 관리되는 공간
ㄴ 스테이지와 마찬가지로 사용자에게는 저장소가 명시적으로 보이지 않음
ㄴ 스테이지에 올라온 파일을 토대로 새로운 버전을 만들면 새로운 버전이 될 후보가 더이상 존재하지 않으므로 스테이지가 비워짐
--
이러한 과정을 반복하며 저장소에 새로운 버전이 쌓이게 됨
ㄴ 이떄 작업 디렉터리에서 버전이 될 후보 파일을 스테이지로 옮기는 것을 '스테이지에 추가한다(add)' 또는 '해당 파일을 스테이지시킨다(staged)'라고 표현함
ㄴ 스테이지에 추가된 파일을 '추가된(add)' 파일 또는 '스테이지된(staged) 파일' 이라고 표현함
저장소에 새로운 버전을 만드는 것을 '커밋한다(commit)' 한다고 함
ㄴ 저장소에 저장된 각각의 버전들을 '커밋'이라고 하기도 함
정리하자면, 작업 디렉터리의 파일은
1. 변경 사항 생성
2. add
3. commit
과정을 통해
1. 작업 디렉터리
2. 스테이지
3. 저장소
순으로 이동하며 새로운 버전으로 만들어짐