깃(Git) 은 버전관리를 해주는 프로그램이라 했고,
깃으로 내 컴퓨터의 폴더를, 버전관리가 되는 저장소(repo) 로 사용할 수 있었다.
깃허브(GitHub) 로는 그 저장소를 원격(깃허브 사이트)으로 저장해 사용할 수 있었는데,
그렇다면 Git은
- 로컬(=내 컴퓨터 폴더에 있는) 저장소
- 원격(=깃허브에 있는) 저장소
2개의 영역으로 나뉠까?
(괜히 물어본다고 흔들리지 말자)당연히 맞는 말인데, 크게보면 위처럼 로컬(local)과 원격(remote) 2가지지만,
자세하게는 로컬 저장소 안에서만 3가지 영역으로 나뉘기에, 4가지 작업영역 으로 나뉜다.
사실 내 컴퓨터에 중앙 저장소에서 때어낸 로컬 저장소를(내 컴퓨터의 한 폴더로) 만들었다고, 깃이 그안의 모든걸 버전으로 저장하지 않는다.
git에서는 버전으로 올릴 것들을 선택할 수 있다.
심지어 선택도 2번(add -> commit)의 과정을 거친다...
그래 뭐 내가 폴더의 모든걸 버전으로 저장하고 싶지 않을 수도 있으니,
버전으로 올릴걸 선택할 수 있는 과정은 그렇다고 친다.
근데 왜 굳이 그걸 한번에 버전으로 올리지 않고, 2번의 과정을 거쳐 버전에 올릴까?
사실 다른 버전 관리도구도 한번에 버전으로 올릴 수 있게 해주고, git만 굳이 2번의 과정을 거친다.
이것은 git의 깊은 뜻이 있는데, 이 곳의 설명(Git의 Staging Area는 어떤 점이 유용한가)을 참고하기 바란다.
- 내 컴퓨터의 폴더 영역이다. (걍 로컬 저장소 폴더 안에 있다고 다 실제 저장소에 저장되는 것이 아니다.)
-
이 폴더 안에서 내가 실제 저장소에 올릴만한(준비중인) 내용들이 모여있는 영역이다.
이 영역에 내용을 올리는 것이 staging(스테이징) 이라고 한다. - 실제 로컬 저장소 영역이다.
그래서 로컬 저장소가 위치하는 내 폴더에 파일을 수정해도 당장은 실제 저장소랑은 상관이 없다.
add
명령어로 폴더(=working directory)안에서 저장소에 올릴만한 정보를 선택할 수 있으며,commit
명령어로 저장소에 올릴만한 정보 영역(=스테이지, staging area)에 있는걸 실제 저장소(repository)에 올린다.