Git의 세가지 영역 : Working Directroy, Staging Area, Repository
Git은 Working Directroy, Staging Area, Repository 세가지 영역으로 이루어져 있다. Working Directory는 작업 공간으로 아직 Git에 기록될 준비가 되지 않은 파일들이 위치하는 공간이다. Staging Area는 대기 공간으로 Git에 기록될 준비가 된 파일들이 위치하는 공간이다. 마지막으로 Repository는 Git에 기록된 파일들이 위치하는 공간이다.
위 세가지 영역은 긴밀히 협력하면서 Git을 구성한다.
git init가 동작하는 방식
git init은 Git의 세가지 영역과 Git을 구성하기 위한 파일과 메타데이터를 만들어낸다.
아무것도 없는 폴더인 GitForKotlinWorld을 생성해보자.
여기에 git init을 하게되면 .git 폴더가 만들어지는 것을 확인할 수 있다.
이 .git 폴더는 이 폴더에 Git의 세가지 영역인 Working Directroy, Staging Area, Repository와 git을 위한 파일 및 영역을 만들어낸다.
즉 git init을 하게 되면 Git 폴더는 Working Directroy, Staging Area, Repository가 있고 모두 비어있는 상태가 된다.
git add가 동작하는 방식
이제 만들어진 폴더에 kotlinworld.txt 파일을 만들어보자.
그러면 다음과 같이 kotlinworld.txt파일은 Working Directory에 들어간다.
위 kotlinworld.txt 대해 git add가 되면 이 파일은 Staging Area에 들어간다.
즉 git add는 Working Directory의 파일을 Staging Area로 옮기기 위한 명령어이다.
둘 이상의 파일 git add 하기
만약 둘 이상의 파일을 한 번에 Staging Area로 옮기고 싶다면 띄워쓰기로 나열하면 된다.
git add [file1] [file2] [file3] ..
특정 디렉터리의 모든 파일 git add 하기
특정 디렉터리의 모든 파일을 add하고 싶으면 아래 명령어를 쓰면 된다. "."은 디렉터리 아래의 모든 파일들을 가리키는 단어이다.
git add .
git commit이 동작하는 방식
git commit은 Staging Area의 파일을 Repository로 옮기는 명령어이다. Repository로 옮길 때는 commit이라는 단위를 쓰는데 commit이라는 단위는 관련된 작업의 묶음이다. 예를 들어 kotlin.txt과 kotlinworld.txt 에 대한 작업을 한 후 이 둘은 연관된 작업이라 묶어서 저장소에 넣고 싶다면 commit을 사용하면 된다. 또한 commit은 묶음으로 들어가므로 어떤 내용에 대한 commit인지를 message로 쓸 수 있다.
다음의 명령어로 commit이 가능하다.
git commit -m [message]
예를 들어 아래와 같이 kotlin.txt와 kotlinworld.txt가 Staging Area에 있다면 commit을 통해 이 두 파일을 Repository로 올릴 수 있다. 이 때 -m "kotlin related work" 라는 옵션을 추가해 이 커밋이 코틀린과 관련된 작업이라는 내용을 추가할 수 있다.
이때 commit에는 메세지와 함께 commit hash값이 생성된다. commit hash란 커밋을 구분하기 위한 구분자이다. commit hash는 git log명령어를 통해 확인 가능하며, commit 뒤에 있는 단어들이 commit hash 값이 되며 맨 마지막 줄에 위에서 작성한 메시지도 표시되는 것을 확인할 수 있다.