# .git 디렉토리안에는 무엇이 있을까?

> Clean Markdown view of GeekNews topic #11232. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=11232](https://news.hada.io/topic?id=11232)
- GeekNews Markdown: [https://news.hada.io/topic/11232.md](https://news.hada.io/topic/11232.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2023-10-08T10:37:28+09:00
- Updated: 2023-10-08T10:37:28+09:00
- Original source: [blog.meain.io](https://blog.meain.io/2023/what-is-in-dot-git/)
- Points: 17
- Comments: 1

## Topic Body

- git init 시 생성되는 .git 디렉토리에 대한 상세 설명  
- .git 디렉토리에는 config, HEAD, hooks, objects, refs 등 여러 파일과 폴더 포함  
  - config 텍스트 파일은 현재 저장소의 git 설정, 작성자 및 파일 모드와 같은 기본 설정 포함  
  - HEAD 파일은 기본 브랜치를 가리키는 저장소의 현재 헤드 포함. 기본 브랜치를 뭘로 했냐에 따라서 master 또는 main 등   
  - hooks 디렉토리는 git 동작 전후에 실행할 수 있는 모든 스크립트 포함   
  - objects 디렉토리는 저장소의 파일과 커밋에 대한 데이터 포함  
  - refs 디렉토리는 브랜치와 태그를 가리키는 참조 또는 포인터 저장  
- 파일이 저장소에 추가되면, index 파일을 수정하고 objects 디렉토리에 새 폴더와 파일 추가  
- objects 디렉토리의 새 파일은 추가된 파일의 유형, 크기, 데이터를 포함하며, 파일명은 내용의 sha1에서 가져옴  
- 파일이 커밋되면, 커밋 메시지를 포함하는 COMMIT_EDITMSG라는 새 파일 생성 및 objects 디렉토리에 새 객체 추가 등 여러 변경 발생  
- git에서 브랜치 생성은 refs/heads 디렉토리에 브랜치 이름과 최신 커밋의 ID를 가진 새 파일 추가를 포함하는 간단한 과정  
- 브랜치 체크아웃은 .git/HEAD 파일을 체크아웃된 브랜치를 가리키도록 업데이트하는 것을 포함  
- 브랜치 병합은 세 가지 방법으로 수행 가능: fast forward merge, rebase merge, 별도의 merge commit 생성  
- 저장소가 푸시되면, objects 디렉토리의 모든 것과 명시적으로 푸시된 refs 아래의 모든 브랜치와 태그가 다른 git 저장소로 전송됨

## Comments



### Comment 19760

- Author: [hidden]
- Created: 2023-10-09T13:34:21+09:00
- Points: 1

[숨김 처리된 댓글입니다]
