레포지토리

init 명령

  • 워크트리와 레포지토리를 생성하기 위해서는 git init 명령어를 사용

init 명령 사용법

git init [레포지토리 이름]
  • 워크트리로 지정할 디렉토리 내부에서 git init 명령어를 실행하면 해당 디렉토리가 워크트리가 되고 그 안에 .git 레포지토리 디렉토리가 생성된다.
  • 워크트리로 지정할 디렉토리의 상위 디렉토리에서 git init [레포지토리 이름] 명령어를 실행하면 해당 이름의 서브디렉토리가 생성되며 이 디렉토리가 워크트리가 되고 그 안에 .git 레포지토리 디렉토리가 생성된다.

실습 1: 레포지토리 생성

  • lab 디렉토리로 이동한 후 repo1이라는 이름의 레포지토리를 생성해보자.
cd $HOME/lab
git init repo1

Initialized empty Git repository in ~/lab/repo1/.git/

  • repo1 디렉토리가 생성되고 그 안에 .git 디렉토리가 생성된 것을 확인할 수 있다.
ls -al
total 0
drwxr-xr-x@  3 joelkim  staff    96 Nov 25 12:53 .
drwxr-xr-x@ 41 joelkim  staff  1312 Nov 25 12:53 ..
drwxr-xr-x@  3 joelkim  staff    96 Nov 25 12:53 repo1
cd repo1
ls -al
bash: cd: repo1: No such file or directory
total 0
drwxr-xr-x@ 3 joelkim  staff   96 Nov 25 12:53 .
drwxr-xr-x@ 3 joelkim  staff   96 Nov 25 12:53 ..
drwxr-xr-x@ 9 joelkim  staff  288 Nov 25 12:53 .git
  • 갓 생성된 .git 디렉토리의 구조는 다음과 같다.
tree .git
.git
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── pre-merge-commit.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   ├── prepare-commit-msg.sample
│   ├── push-to-checkout.sample
│   ├── sendemail-validate.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

9 directories, 18 files

.git 디렉토리의 구조

  • .git 디렉토리 구조에 대한 공식적인 설명은 다음 링크에서 확인할 수 있다
  • .git 디렉토리에는 다음과 같은 서브 디렉토리가 있을 수 있다.
    • objects 디렉토리
    • refs 디렉토리
    • logs 디렉토리
    • info 디렉토리
    • hooks 디렉토리

objects 디렉토리

objects/pack 디렉토리

refs 디렉토리

중요 파일들

  • 파일
    • 텍스트 파일
      • config 파일: 레포지토리 설정 파일
      • description 파일: 레포지토리 설명 파일
      • COMMIT_EDITMSG 파일: 커밋 메세지 작성용 임시 파일
    • 바이너리 파일
      • index 파일: 스테이지 정보 저장
      • HEAD 파일: 현재 체크아웃 위치 정보

레포지토리 설정

객체 정보

참조 정보

로그 정보