깃을 처음 접하면서 헷갈리는 로직(작업 디렉터리, 스테이지, 저장소의 관계)에 대해 정리해봤다.
버전이 만들어지는 과정을 이해하려면 깃이 관리하는 세개의 공간인 작업 디렉터리, 스테이지, 저장소를 이해해야 한다.
나는 내 컴퓨터 안에 로컬 저장소를 만들었다.
이 저장소는 .git이라는 폴더이다. .git이 놓여 있는 곳이 프로젝트가 위치할 공간이고 이 공간을 작업 디렉터리라고 한다. 우리는 깃을 이용해서 작업 디렉터리 내에 위치한 파일 및 폴더의 현재 상태를 버전으로 만들고, 만들어진 버전을 관리할 수 있다. 즉, 작업 디렉터리는 버전관리의 대상이 위치하는 공간이다.
작업디렉터리에 있는 프로젝트에 변경 사항이 생기는 순간 새로운 버전을 만들 수 있다.
이때 중요한 것이 "변경 사항이 생겼다고 해서 무조건 새로운 버전으로 만들 필요가 없다"이다.
우리는 새로운 버전을 만들기 전에 작업 디렉터리 내에서 변경 사항이 생긴 파일 중 다음 버전이 될 후보를 선별하는 작업이 필요하다.
그래서 깃으로 버전을 만들 때는 작업 디렉터리 내에서 변경된 파일들 중에서 새로운 버전이 될 파일만 어떤 공간으로 옮기는 작업을 거치게 되는데 이 공간이 "스테이지"이다.
우리는 버전을 만들기 위해 작업 디렉터리에 있는 파일에 변경 사항을 만들고, 이 변경 사항들 중 새로운 버전으로 만들려는 파일을 선별해 스테이지로 옮긴다.
작업 디렉터리는 프로젝트가 위치한 공간이라 눈으로 직접 볼 수 있지만 스테이지는 보이지 않는다. 다음 버전이 될 후보를 스테이지로 옮겼다면 이 파일을 새로운 버전으로 만들어야 한다. 스테이지에 있는 파일을 바탕으로 새로운 버전으로 만들면 새 버전이 "저장소"에 추가된다.
작업 디렉터리에서 만들어진 모든 버전들의 내역이 저장소에 있다. 즉, 저장소는 버전이 만들어지고 관리되는 공간이다. 저장소도 스테이지와 마찬가지고 사용자에게 보여지지 않는다. 이때 "작업 디렉터리"에서 버전이 될 후보 파일을 "스테이지"로 옮기는 것을 "스테이지에 추가한다(add)"라고 한다. 또한 저장소에 새로운 버전을 만드는 것을"commit"이라고 한다.
정리하자면, 작업 디렉터리의 파일은 변경 사항 생성->add->commit순으로 새로운 버전으로 만들어진다.