본문 바로가기
기타/Git

[Git] init

by 코딩하는 랄로 2023. 11. 18.
728x90

Git을 설치하고 초기 설정을 진행하였다면, Git을 사용하기 위한 준비는 끝났다. 이제 Git의 여러 명령어를 통하여 Git을 실제로 사용해 볼 것인데, 단순히 어떤 작업을 하기 위해서는 이런 명령어를 사용하면 돼라는 식의 내용 전달 보다는 해당 명령어를 사용하였을 때, Git이 어떤 식으로 동작하는지를 같이 알아봄으로써, Git 자체에 대한 이해도를 높이는 방식으로 공부해 보자.

 

 

Git 프로젝트의 세가지 단계

Git 프로젝트에는 3가지의 단계가 존재하는데, 이 부분에 대한 이해는 Git을 공부하기 위해서는 반드시 짚고 넘어가야 할 부분이다. Git은 해당 프로젝트의 파일을 다음의 3가지 상태로 관리한다.

상태 설명
Committed 데이터가 로컬 데이터베이스에 안전하게 저장됨을 의미
Modified 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않았음을 의미
Staged 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미

 

Git은 자신이 관리하는 프로젝트의 데이터(파일) 들을 위의 3가지 상태로서 관리를 하고 이는 Git 프로젝트의 세 가지 단계와도 연결이 된다. Git 프로젝트의 3가지 단계를 알아보면서 어떠한 연결점을 가지고 있는지 살펴보자.

 

Git directory는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다. 이 Git 디렉토리가 Git의 핵심으로, 해당 디렉토리 안의 정보(메타데이터, 객체 데이터베이스)를 가지고 깃 프로젝트가 관리하는 파일들의 버전들을 관리하고 깃이 제공하는 여러 기능들을 이용할 수 있는 것이다. Git 디렉토리만 있어도 저장소를 백업할 수 있다. (반대로 말하면, 만약 해당 Git 디렉토리를 삭제하게 되면 돌이킬 수 없는 결과가...)

 

Working derectory는 git 디렉토리가 관리하는 프로젝트의 특정 버전을 checkout 한 것이다. git 디렉토리는 현재 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와 워킹 트리(디렉토리)를 만들어 작업을 하는 것이다. 즉, 사용자가 원하는(checkout) 버전의 파일들을 git 디렉토리에서 뽑아와서 작업을 할 수 있도록 제공해주는 것이다.

 

Staging area는 Git 디렉토리 내에 존재하는 곧 커밋할 파일에 대한 정보를 저장하는 공간이다. Git에서는 기술 용어로 index라고 하지만, staging area라고 사용을 하기도 한다. 

 

Git 디렉토리의 3가지 단계와 Git이 관리하는 파일의 3가지 상태를 연결하여 보자. 먼저, 워킹 디렉토리에서 파일을 수정하는 단계부터 시작해보자. ( 파일을 수정하기 전까지는, 해당 파일은 committed 상태 )

과정 Git 프로젝트의 단계 파일 상태
워킹 트리에서 파일을 수정 Working Directory committed => modified
Staging area에 파일을 stage해서 커밋할 스냅샷을 생성, 선택적으로 커밋할 파일을 지정 가능 Staging Area modified => staged
Staging area에 파일을 커밋하여 Git 디렉토리에 영구적으로 스냅샷을 저장 .git directory staged => committed

 

즉, Git 디렉토리에 있는 파일들은 Committed 상태이고 파일을 수정하고 Staging Area에 추가했다면 Staged 상태이다. 하지만 Checkout하고 나서 수정했지만 Staging Area에 추가하지 않았으면 Modified 상태이다. 

 

Git 명령어를 사용하여 Git 프로젝트의 파일들을 다룰 때에 이러한 파일의 상태와 Git 프로젝트의 단계와의 관계를 잘 이해한다면 보다 더 능숙하게 Git을 다룰 수 있다.

 

 

 

Git init

위의 Git 프로젝트의 모든 정보를 저장하고 관리하는 가장 핵심이 되는 단계인 .git directory(or repository)는 어떻게 생성할까? 만약 특정 Git 프로젝트를 clone하게 되면 당연히 해당 프로젝트를 관리하고 있는 git directory도 자연스레 만들어진다.

 

하지만, 다른 Git 프로젝트를 Clone하는 것이 아닌 내가 지금 작업하는 디렉토리를 Git 디렉토리로 만들기 위해서는 Git의 init 명령어를 사용하여야 한다.

$ git init

 

해당, 명령어를 통해 Git에게 지금 현재 디렉토리를 Git으로 관리할 것이라고 말해주는 것이다. 그렇기 때문에 해당 명령어를 사용하면 해당 디렉토리를 관리하기 위한 .git directory가 자동으로 생성되게 된다.

 

 

 

git init 이후에 GitStudy directory에 .git directory가 생성된 것을 확인 할 수 있다. 이제는 해당 디렉토리안의 생성되는 파일들을 Git을 이용하여 버전 관리할 수 있게 된 것이다. .git directory를 한번 살펴보면 아래와 같은 파일 또는 폴더를 볼 수 있다.

 

해당 파일과 폴더들은 저장소에 필요한 뼈대 파일(Skeleton)이 들어있다. 해당 파일과 폴더에 대한 설명은 아래와 같다. ( 이 명령만으로는 아직 프로젝트의 어떤 파일도 관리하지는 않는다. )

File / Dir Description
description GitWeb 프로그램에서만 사용, 딱히 신경안써도 됨
config git 프로젝트의 설정 옵션
info .gitignore 파일처럼 무시할 파일 패턴을 적어 두는 곳, Git으로 관리되지 않음
hooks 클라이언트 훅이나 서버 훅이 위치
HEAD 현재 Checkout한 브랜치를 가리킴
refs 커밋 개체의 포인터(브랜치, 태그, 리모트 등)를 저장
objects 모든 컨텐츠를 저장하는 데이터 베이스

 

위의 표에서 굵은 글씨를 표시된 것과 현재는 없지만 Staging Area에 정보를 저장하는 index 파일은 Git의 핵심이자 git의 명령어들이 어떻게 동작하는지 이해하기 위해서 꼭 알아야 하는 파일과 폴더들이다. ( 자세한 내용에 대해서는 추후에... )

 

 

 

 

 

 

reference : git

728x90

'기타 > Git' 카테고리의 다른 글

[Git] Git 개체 - Commit  (2) 2023.11.22
[Git] Git 개체 - Tree  (2) 2023.11.21
[Git] Git 개체 - Blob  (1) 2023.11.21
[Git] 설치 및 초기 설정  (1) 2023.11.18
[Git] Git 이란?  (0) 2023.11.18