목차
깃에는 크게 3가지의 환경이 있다.
- Working Directory : 로컬 컴퓨터에서 우리가 프로젝트의 파일을 실시간으로 수정하는 공간
후술하겠지만, 여기서도 tracking과 untracking 둘로 나눠진다. - Staging Area: 어느 정도 작업을 하다가 버전 히스토리에 남길 준비가 된 파일들을 옮겨놓는 공간 (꼭 최종본이 아니어도 됨!)
- git Directory : 버전 히스토리를 가지고 있는 공간 git repository 깃 레파지토리라고 불리기도 한다.
깃 워크 플로우 개요
깃은 어떠한 과정을 거쳐 로컬 컴퓨터에 있는 파일들을 버전 별로 정리해서 기억/정리 하는 것인지 알아보자.
로컬 컴퓨터 워킹 디렉토리에 있는 파일들은 깃 디렉토리로 옮겨진 후 타임캡슐안에 묻혀야만 한다. 이게 깃이 시간을 넘나들며 온갖 버전의 파일을 가져올 수 있는 비법이니까.
그런데 워킹 디렉토리에서 바로 깃 디렉토리로 옮겨질 수는 없다. 중간 점검 단계를 거쳐야 하는데 이게 바로 staging area이다. 깃 디렉토리로 옮겨질 준비가 되었다는 장소이다. staging area에서 commit을 해야지만 진짜로 깃 디렉토리로 옮겨질 수 있다.
로컬 컴퓨터에서 a.txt b.txt c.txt 작업을 하고 있다고 치자. b.txt와 c.txt가 어느 정도 내용 작성이 되어 중간 버전으로 남기고 싶다. a.txt는 워킹 디렉토리에 그대로 남긴 상태로, b.txt와 c.txt를 staging area로 옮긴다. 그리고 곧바로 커밋을 외쳐 깃 디렉토리에 이력을 남겼다. (타임캡슐 묻기)
이후 워킹 디렉토리에서 a.txt도 부족한 작업을 완료해서 a.txt도 버전을 남기고 싶다. a.txt만 홀로 staging area에 올린 다음 또다른 commit을 통해 git 레파지토리에 올려두둔다. (두 번째 이력 또 생성)
이렇게 해두면 두 개의 타임 캡슐을 가지고 있는 셈이다. 나중에 우리는 체크아웃을 통해서 이 시점의 파일을 다시 워킹디렉토리로 가져올 수 있다. (a.txt 1개던 b.txt & c.txt 묶음이던)
Commit이란 무얼까?
마치 사진을 찍듯이 현재 파일을 저장해서 이력을 남기는 행위이다. 각각의 커밋에는 스냅샷된 정보들을 기반으로해서 고유 해쉬코드가 부여된다.
이 아이디 같은 것으로 우리가 버전 정보를 참조할 수 있는 것이다.
커밋에는 또 message, author, date, time 같은 정보도 남겨진다.
로컬 뿐만 아니라 리모트 서버에도
조심 해야 하는 부분이 있다. 이러한 이력은 내 로컬 컴퓨터 .git 폴더내 저장되는 것이기 때문에. 만약 .git 폴더가 손상된다면 예전 버전으로 원복할 수 없다.
그래서 로컬 컴퓨터 외 깃허브와 같은 remote 서버에도 올려두는 것이 좋다. 이 때 서버에 올려두는 행위를 push, 서버에서 다시 로컬 깃 레파지토리로 가져오는 행위를 pull이라고 한다.
★ 학습에 도움을 받은 강의들 (가나다순) ★
- 드림코딩앨리 : https://www.youtube.com/watch?v=Z9dvM7qgN9s
- 생활코딩 : https://www.inflearn.com/course/git-2#curriculum
- 알코 : https://www.yalco.kr/55_git_github/