깃의 Workflow
- working directory
- staging area
- .git directory
- 깃에는 총 3가지의 작업 환경이 나누어져 있다.
- working directory
- 프로젝트의 파일들을 수정하는 작업하고 있는 곳
- staging area
- 버전 히스토리에 저장할 준비가 되어있으면 파일들을 옮겨 놓는 곳
- .git directory
- 버전의 히스토리를 가지고 있는 git repository 혹은 git directory
- 예를 들어 프로젝트의 폴더에서 파일들을 수정하고 있다가, 어느정도 준비가 된 파일들을 staging area로 옮긴다.
- commit 이라는 명령어를 이용해 staging area에 있는 파일들을 git 버전 히스토리에 저장하게 된다.
- 이렇게 git 버전 히스토리에 저장된 파일들은 checkout이라는 명령어를 통해 언제든지 이전 버전으로 돌아갈 수 있다.
- 이렇게 저장된 git 히스토리는 내 컴퓨터에만 저장이 되기 때문에 컴퓨터에 문제가 생기면 저장한 히스토리들을 전부 잃어버림.
- 그렇기 때문에 이런 히스토리를 내 컴퓨터에만 저장하는 것이 아닌, 깃허브와 같은 서버에 push라는 명령어를 통해 나의 git directory를 서버에 업로드 할 수 있다.
- 그리고 서버에서 로컬로 파일들을 다운받고 싶을때는 pull 이라는 명령어를 통해 다운 받을 수 있다.
각 버전에 들어있는 정보들
- 각각의 커밋에는 스냅샷된 정보들을 기반으로 해서 고유한 해시코드가 부가됨.
- 이 id를 이용해 버전 정보를 참조할 수 있다.
- 그리고 이 커밋에는 id 뿐만 아니라, 어떤 버전인지 버전과 관련된 메시지와 누가 작성했는지, 날짜와 시간 같은 정보들도 포함이 되어 있다.
working directory
- working directory는 크게 두가지로 나뉠 수 있다.
- untracked
- tracked
- 깃이 이미 알고 있는, tracking 하고 있는 파일이라면 tracked 카테고리에
- 새로 만들어진 파일이거나, 기존에 존재하던 프로젝트에서 깃을 초기화하게 되면 untracked 카테고리로 나눈다.
또 traked는 2가지로 나눌 수 있다.
- modified
- unmodified
이전 버전과 비교해서
- 수정이 되면 modified
- 수정이 안되어 있는 상태면 unmodified
그래서 수정이 된 modified 파일들만 staging area로 옮겨 갈 수 있다.
staging area로 옮기기
-
git init을 한 폴더 안에서 새로운 작업
-
새로운 폴더가 생기거나, 이미 존재하는 작업물에서 변경사항이 있는 경우?
- git status를 하게 되면
- 아직 commit 할 것들은 없지만, untracked 한 파일들이 있기 때문에 git add라는 명령어를 이용해 tracking을 하라고 말한다.
-
그래서 working directory에서 tracked 카테고리로 만들기 위해서는 git add 명령어를 이용해 옮길 수 있다.
- git add . 을 하게 되면 변경된 파일들 전부를 옮김.
- git add a.text 는 a.text라는 파일만 tracked 카테고리로 바뀐다.
- a.text 파일은 tracked 카테고리로 바뀌었기 때문에, commit할 준비가 되어있는 변경사항으로 a.text가 새로운 파일로 나온다.
- 모든 파일을 커밋할 준비가 되어있게 만들어준다.
- 여기서 a.text 파일을 고치게 된다면?
- 모든 파일이 전부 commit할 준비가 되었지만, a.text 파일이 수정되어 있다고 뜬다.
- 왜냐면 tracked 카테고리로 분류되면서 깃이 a.text라는 파일을 이제 알고있는데, 알고있는것과 다르게 수정이 되었기 때문이다.
- 소스트리로 볼 수 있다.
- 만약 a, b, c를 전부 스테이지에 올렸다.
- 그런데 a를 수정하면, 수정한 파일을 git add로 스테이지에 올리지 않았기 때문에 위의 그림처럼 뜨게 된다.
- 다시 git add . 를 이용해 전부 스테이지 올린다.
- 위의 그림처럼 뜨는데, 여기서 git rm --cached 를 이용해 다시 staging area에서 working directory로 옮겨갈 수 있다.
- 전부 다 제거
- status를 확인하면 아까 add를 하지 않은 상태로 된다.