CI\CD/Git

[Git] git init, add, commit 이 동작하는 방식 : Git 내부 살펴보기

반응형

Git의 세가지 영역 : Working Directroy, Staging Area, Repository

Git은  Working Directroy, Staging Area, Repository 세가지 영역으로 이루어져 있다. Working Directory는 작업 공간으로 아직 Git에 기록될 준비가 되지 않은 파일들이 위치하는 공간이다. Staging Area는 대기 공간으로 Git에 기록될 준비가 된 파일들이 위치하는 공간이다. 마지막으로 Repository는 Git에 기록된 파일들이 위치하는 공간이다.

 

그림1. Git의 세가지 영역

 

위 세가지 영역은 긴밀히 협력하면서 Git을 구성한다.

 

 

git init가 동작하는 방식

git init은 Git의 세가지 영역과 Git을 구성하기 위한 파일과 메타데이터를 만들어낸다.

아무것도 없는 폴더인 GitForKotlinWorld을 생성해보자.

그림2. 아무것도 없는 GitForKotlinWorld

 

 

여기에 git init을 하게되면 .git 폴더가 만들어지는 것을 확인할 수 있다.

그림3. .git 폴더 생성

 

 

이 .git 폴더는 이 폴더에 Git의 세가지 영역인 Working Directroy, Staging Area, Repository와 git을 위한 파일 및 영역을 만들어낸다.

그림4. .git 폴더 내부

 

즉 git init을 하게 되면 Git 폴더는 Working Directroy, Staging Area, Repository가 있고 모두 비어있는 상태가 된다. 

그림5. Git의 세가지 영역

 

git add가 동작하는 방식

이제 만들어진 폴더에 kotlinworld.txt 파일을 만들어보자. 

그림7. Git에 파일 추가

 

그러면 다음과 같이 kotlinworld.txt파일은 Working Directory에 들어간다.

그림8. git add 예제1

 

위 kotlinworld.txt 대해 git add가 되면 이 파일은 Staging Area에 들어간다. 

 

그림9. Staging Area

 

그림10. Staging Area

 

즉 git add는 Working Directory의 파일을 Staging Area로 옮기기 위한 명령어이다.

 

둘 이상의 파일 git add 하기

만약 둘 이상의 파일을 한 번에 Staging Area로 옮기고 싶다면 띄워쓰기로 나열하면 된다.

git add [file1] [file2] [file3] ..

그림11. 둘 이상의 파일 더하기

 

특정 디렉터리의 모든 파일 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" 라는 옵션을 추가해 이 커밋이 코틀린과 관련된 작업이라는 내용을 추가할 수 있다.

그림12. commit하기

 

이때 commit에는 메세지와 함께 commit hash값이 생성된다. commit hash란 커밋을 구분하기 위한 구분자이다. commit hash는 git log명령어를 통해 확인 가능하며, commit 뒤에 있는 단어들이 commit hash 값이 되며 맨 마지막 줄에 위에서 작성한 메시지도 표시되는 것을 확인할 수 있다.

그림13. commit hash

 

그림14. commit

반응형

 

이 글의 저작권은 Dev World 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.