Skip to content

Commit d75a552

Browse files
committed
docs: README 작성
1 parent e456a88 commit d75a552

File tree

2 files changed

+63
-38
lines changed

2 files changed

+63
-38
lines changed

README.md

Lines changed: 63 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,53 +2,78 @@
22

33
> Git의 내부 구조를 직접 구현해보는 CLI 기반 학습 프로젝트입니다.
44
5-
`add`, `commit`, `log`, `branch`, `checkout`
6-
Git의 핵심 동작을 JavaScript로 재구현하면서
7-
*버전 관리 시스템의 원리*를 몸으로 이해하는 것을 목표로 합니다.
5+
Git의 내부 동작 원리를 학습하며 구현한 Git 클론 프로젝트입니다.
6+
Git 객체(`blob`, `tree`, `commit`) 생성과 참조 과정을 직접 구현해보며 구조를 체화했습니다.
87

9-
---
8+
# 시연 데모
109

11-
## 📌 프로젝트 목표
10+
![demo](./images/mini-git-demo.gif)
1211

13-
- Git의 **snapshot 기반 저장 구조** 체득
14-
- `blob`, `tree`, `commit`, `HEAD` 등 Git 객체 구조 직접 구현
15-
- CLI 명령어 흐름(`git add`, `git commit`, `git log`)을 JavaScript로 재현
16-
- 구조 설계를 통해 **자료구조, 파일시스템, OOP 감각** 강화
12+
```plaintext
13+
Working Dir → add() → Blob (해시)
14+
15+
Index (스테이징)
16+
17+
commit() → Tree → Commit
18+
19+
HEAD → Branch (refs/heads/main)
20+
```
21+
22+
## 구현 기능
23+
24+
| 명령어 | 설명 |
25+
| ---------- | --------------------------------------------- |
26+
| `init` | 저장소 초기화 |
27+
| `add` | 파일을 `Blob` 객체로 저장 후 `index` 기록 |
28+
| `commit` | `Tree`, `Commit` 객체 생성 및 `HEAD` 업데이트 |
29+
| `branch` | 새로운 브랜치 생성 |
30+
| `checkout` | 브랜치 전환 |
31+
| `log` | 커밋 로그 출력 |
1732

18-
## ⚙️ 사용 기술
33+
## 설치 및 사용
34+
35+
```bash
36+
npm install
1937

20-
| 분류 | 기술 |
21-
| ----------- | ------------------------------------------- |
22-
| 언어 | JavaScript (Node.js) |
23-
| 파일 I/O | `fs` 모듈 |
24-
| CLI 처리 | `process.argv`, `readline` |
25-
| 데이터 저장 | JSON 기반 `.mygit/` 디렉토리 내부 객체 구조 |
38+
# 일반 실행
39+
node src/index.js init
40+
node src/index.js add hello.txt
41+
node src/index.js commit "first commit"
2642

27-
## 주요 기능
43+
# 또는 CLI 명령어로 등록 (1회 실행)
44+
npm link
2845

29-
| 명령어 | 설명 |
30-
| ---------- | ------------------------------------------------- |
31-
| `init` | `.mygit/` 폴더 생성 및 초기 구조 설정 |
32-
| `add` | - 파일을 읽고 해시(blob)로 저장<br>- index에 등록 |
33-
| `commit` | snapshot 저장, 이전 커밋과 연결 |
34-
| `log` | HEAD에서 커밋 히스토리 추적 및 출력 |
35-
| `branch` | 브랜치 포인터 생성 |
36-
| `checkout` | HEAD 포인터 전환 및 상태 변경 |
46+
# 이후부터
47+
mini-git init
48+
mini-git add hello.txt
49+
mini-git commit "first commit"
3750

38-
---
51+
```
3952

40-
## 🧱 디렉토리 구조
53+
## 디렉토리 구조
4154

4255
```bash
43-
mini-git/
44-
├── src/
45-
│ ├── commands/ # CLI 명령어 처리 로직 (init, add, commit 등)
46-
│ ├── core/ # Git 내부 처리 로직 (객체 저장, HEAD 갱신 등)
47-
│ ├── domain/ # Git의 핵심 객체 (Blob, Tree, Commit, Branch)
48-
│ ├── utils/ # 해시 계산 등 유틸 함수
49-
│ └── index.js # CLI 진입점
50-
├── .mygit/ # Git 객체가 저장되는 폴더 (init 후 생성됨)
51-
├── .gitignore # Git 추적 제외 설정
52-
├── package.json # 프로젝트 정보 및 실행 스크립트
53-
└── README.md # 프로젝트 설명 문서
56+
src
57+
├── index.js # CLI 진입점 (전략 패턴으로 명령어 분기)
58+
├── commands/ # 각 명령어 실행 함수
59+
├── core/ # Git 내부 로직 (객체 생성, 해시 처리 등)
60+
├── strategies/ # 명령어 분기 로직 (전략 패턴)
61+
├── config/ # 사용자 정보 및 환경 설정
62+
├── utils/ # 공통 유틸 함수
63+
├── domain/ # 메시지, 상수, Enum 정의
64+
└── __test__/ # Jest 테스트 코드
5465
```
66+
67+
## 기술 스택
68+
69+
| 기술 | 사용 목적 및 역할 |
70+
| ------------------------ | ---------------------------------------- |
71+
| **Node.js** | CLI 기반 명령어 실행 환경 |
72+
| **Jest** | 커맨드별 단위 테스트 수행 |
73+
| **SHA-1 해시 구현** | Git 객체 간 참조를 위한 고유 식별자 생성 |
74+
| **파일 시스템 스토리지** | `.mini-git` 디렉토리에 Git 객체 저장 |
75+
| **JSDoc** | 함수 및 모듈 문서 자동 생성 도구 |
76+
77+
> 복잡한 유틸 함수의 JSDoc 기반 자동 문서는 [여기서 확인](https://mindaaaa.github.io/mini-git/global.html)할 수 있습니다.
78+
79+
🔍 더 깊은 내용이 궁금하다면?

images/mini-git-demo.gif

395 KB
Loading

0 commit comments

Comments
 (0)