Git 내부 - git init 후 발생하는 일

송준섭 Junseop Song·2024년 1월 3일

Git

목록 보기
3/8
post-thumbnail

직접 Git 저장소 생성해보기

일단 직접 test라는 폴더를 생성해서 git init 명령어를 실행해 보았다.

위와 같이 .git 폴더(git directory)가 생성이 되고 그 안에 HEAD, config, description 파일hooks, info, objects, refs 폴더가 생성되는 것을 볼 수 있었다.

Git의 내부

Git - Plumbing 명령과 Porcelain 명령

우선 Git은 기본적으로 Content-addressable 파일 시스템이고 그 위에 VCS 사용자 인터페이스가 있는 구조

Git 초기에는 (1.5 이전 버전) 사용자 인터페이스가 훨씬 복잡했었음 → VCS가 아니라 파일 시스템을 강조했기 때문

Git은 원래 사용하기 쉽게 만든 VCS라기보다는 VCS를 위한 툴킷

기본적으로 매우 많은 저수준 명령어로 구성돼 있고 이 명령어들을 UNIX 스타일로 엮어서 실행하거나 스크립트로 만들어 사용하도록 설계

이러한 저수준의 명령어는 “Plumbing” 명령어라고 부르고 좀 더 사용자에게 친숙한 사용자용 명령어는 “Porcelain” 명령어라고 부름

Plumbing 명령어는 직접 커맨드라인에서 실행하기보다 새로운 도구를 만들거나 각자 필요한 스크립트를 작성할 때 사용

새로 만든 디렉토리나 이미 파일이 있는 디렉토리에서 git init 명령을 실행하면 Git은 데이터를 저장하고 관리하는 .git 디렉토리를 만든다.

초기 .git 디렉토리의 폴더 구조는 다음과 같다.

config
description
HEAD
hooks/
info/
objects/
refs/

config 파일에는 해당 프로젝트에만 적용되는 설정 옵션이 들어 있음

description 파일은 기본적으로 GitWeb 프로그램에서만 사용하기 때문에 이 파일은 신경쓰지 않아도 됨

info 디렉토리는 .gitignore 파일처럼 무시할 파일의 패턴을 적어 두는 곳 → 하지만 .gitignore 파일과는 달리 Git으로 관리되지 않음

hooks 디렉토리에는 클라이언트 훅이나 서버 훅이 위치

이제 남은 HEAD 파일, index 파일, objects 디렉토리, refs 디렉토리 네 항목이 Git의 핵심

objects 디렉토리는 모든 컨텐트를 저장하는 데이터베이스 

refs 디렉토리에는 커밋 개체의 포인터(브랜치, 태그, 리모트 등)를 저장

HEAD 파일은 현재 Checkout 한 브랜치를 가리킴

index 파일은 Staging Area의 정보를 저장

0개의 댓글