{"id":50103518,"url":"https://github.com/soomtong/gluck","last_synced_at":"2026-05-23T09:01:14.569Z","repository":{"id":359383081,"uuid":"1245841900","full_name":"soomtong/gluck","owner":"soomtong","description":"git log unfolds code into knowledge.","archived":false,"fork":false,"pushed_at":"2026-05-22T00:52:47.000Z","size":314,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-22T00:55:51.628Z","etag":null,"topics":["deepseek","git","log","opencode","rust","vibe"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soomtong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-21T15:57:45.000Z","updated_at":"2026-05-22T00:52:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/soomtong/gluck","commit_stats":null,"previous_names":["soomtong/gluck"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/soomtong/gluck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soomtong%2Fgluck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soomtong%2Fgluck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soomtong%2Fgluck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soomtong%2Fgluck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soomtong","download_url":"https://codeload.github.com/soomtong/gluck/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soomtong%2Fgluck/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33389229,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deepseek","git","log","opencode","rust","vibe"],"created_at":"2026-05-23T09:00:58.248Z","updated_at":"2026-05-23T09:01:14.556Z","avatar_url":"https://github.com/soomtong.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gluck\n\n[![Version](https://img.shields.io/badge/version-0.3.1-blue)](https://github.com/soomtong/gluck)\n[![Rust](https://img.shields.io/badge/rust-edition%202021-orange)](https://www.rust-lang.org)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n\n\u003e **g**it **l**og, **u**nfolds **c**ode into **k**nowledge.\n\u003e\n\u003e 커밋 로그라는 시간의 주름을 따라 접힌 코드가 펼쳐진다 — 읽고, 비교하고, 이해하는 행위 끝에 지식이 남는다.\n\u003e\n\u003e 바이너리 이름 `glc`는 손가락이 기억하는 명령어: home row에서 벗어나지 않고 `g l c`.\n\u003e **gluck**은 그 뒤에 *u*nfolding과 *k*nowing을 더한, 프로젝트의 온전한 이름이다.\n\n**Git history file viewer** — 터미널에서 git history의 파일을 탐색하고 읽는 TUI 도구.\n\n## 설치\n\n### Cargo\n\n```bash\ncargo install --git https://github.com/soomtong/gluck\n```\n\n### Homebrew (macOS, Apple Silicon)\n\n\u003e Intel Mac(x86_64)용 바이너리는 GitHub Actions 지원 중단으로 제공하지 않습니다.\n\u003e Intel Mac 사용자는 아래 Cargo 설치 방법을 이용해 주세요.\n\n```bash\nbrew tap soomtong/tap\nbrew install glc\n```\n\n### Linux (직접 빌드)\n\nLinux용 바이너리는 별도로 제공되지 않습니다. Rust 툴체인이 설치되어 있다면 직접 빌드할 수 있습니다.\n\n```bash\ncargo install --git https://github.com/soomtong/gluck\n```\n\n또는 소스를 받아 빌드:\n\n```bash\ngit clone https://github.com/soomtong/gluck\ncd gluck\ncargo build --release\n# 빌드 결과: ./target/release/glc\n```\n\n## 사용법\n\n```bash\nglc                 # 현재 디렉토리의 git history 열기\nglc /path/to/repo   # 특정 저장소 열기\n```\n\n### Pick 모드 — 커밋 탐색\n\n| 키 | 동작 |\n|----|------|\n| `j` / `k` / `↑` / `↓` | 커밋 이동 |\n| `Enter` / `l` | 선택 커밋 View 모드 |\n| `Tab` | 선택 커밋 Diff 모드 |\n| `.` | .gitignore 파일 필터 토글 |\n| `/` | 커밋 검색 |\n| `^T` | 색상 테마 전환 |\n| `q` | 종료 |\n\n### View 모드 — 파일 읽기\n\n| 키 | 동작 |\n|----|------|\n| `j` / `k` / `↑` / `↓` | 파일 트리 이동 |\n| `u` / `d` | 내용 스크롤 (3줄) |\n| `J` / `K` | 내용 페이지 스크롤 |\n| `Tab` | Diff 모드 전환 |\n| `Esc` / `h` | Pick 모드 |\n| `^N` / `^P` | 다음/이전 커밋 이동 |\n| `^T` | 색상 테마 전환 |\n| `q` | 종료 |\n\n### Diff 모드 — 변경 비교\n\n| 키 | 동작 |\n|----|------|\n| `j` / `k` / `↑` / `↓` | 변경 파일 이동 |\n| `h` / `l` / `←` / `→` | 변경 파일 이동 |\n| `u` / `d` | diff 내용 스크롤 (3줄) |\n| `J` / `K` | diff 내용 페이지 스크롤 |\n| `s` | side-by-side / unified 토글 |\n| `Tab` | View 모드 |\n| `Esc` | Pick 모드 |\n| `^N` / `^P` | 다음/이전 커밋 쌍 이동 |\n| `^T` | 색상 테마 전환 |\n| `q` | 종료 |\n\n## 설정\n\n설정 파일은 XDG config 경로에 저장됩니다.\n\n- **macOS**: `~/Library/Application Support/gluck/config.toml`\n- **Linux**: `~/.config/gluck/config.toml`\n\n```toml\n[theme]\n# 색상 테마: plain (기본), catppuccin, tokyo-night, nord, gruvbox, one-light\nname = \"plain\"\n\n[ui]\n# u/d 키 스크롤 줄 수 (기본: 3)\nscroll_lines = 3\n```\n\n## 배경\n\n오픈소스 프로젝트를 공부할 때 가장 좋은 방법 중 하나는 git history를 따라가며 코드가 어떻게 변해왔는지 읽는 것이다. 하지만 기존 도구들은 각각 한계가 있다:\n\n- **git log / git show** — 변경사항은 볼 수 있지만 해당 시점의 전체 파일을 읽기 불편하다\n- **tig** — log 탐색에 훌륭하지만 파일 뷰어로는 부족하다\n- **GitHub/GitLab** — 브라우저가 필요하고 커밋 간 이동이 느리다\n\ngluck은 git history를 타임라인으로 삼아, 각 시점의 파일을 읽고 비교하는 데 집중한다.\n\n## 핵심 기능\n\n### Git log 탐색 (Pick)\n\n- 커밋 리스트를 탐색하고 선택\n- 파일 단위로 변경 이력 필터링\n- 커밋 메시지, 작성자, 날짜 기반 검색\n\n### View 모드\n\n- 선택한 커밋 시점의 전체 파일 내용 조회\n- 파일 트리 탐색 (해당 커밋 기준)\n- syntax highlight 지원\n\n### Diff 모드\n\n- 두 커밋 간 변경사항 비교 (side-by-side / unified)\n- 파일 단위 diff, 특정 함수/블록 단위 diff\n- 변경된 파일만 필터링하여 보기\n\n### Syntax Highlight\n\n- 주요 언어 syntax highlight\n- 터미널 색상 테마 지원\n\n## 사용 시나리오\n\n- 오픈소스 프로젝트를 처음 공부할 때 초기 커밋부터 따라가며 코드 읽기\n- 특정 기능이 언제, 어떻게 추가되었는지 추적\n- 버그 수정 커밋을 찾아 어떤 변경이 있었는지 확인\n- 프로젝트 문서(history 내 README, docs 등)의 변천사 읽기\n\n## 기술 방향\n\n- Terminal 전용 TUI 도구\n- 로컬 git repository 기반 동작\n\n## 영감 / 참고\n\n- [tig](https://github.com/jonas/tig) — ncurses 기반 git viewer\n- [gitui](https://github.com/extrawurst/gitui) — Rust 기반 terminal git UI\n- [delta](https://github.com/dandavison/delta) — syntax-highlighted diff viewer\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoomtong%2Fgluck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoomtong%2Fgluck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoomtong%2Fgluck/lists"}