Git용 Spotify Wrapped를 GitHub Copilot CLI로 만들었습니다
Source: Dev.to
번역할 텍스트가 제공되지 않았습니다. 번역을 원하는 본문을 알려주시면 한국어로 번역해 드리겠습니다.
What I Built
git-wrapped — Spotify Wrapped, but for your Git history.
Every December, Spotify tells you what kind of listener you are. I wanted the same thing for coding. What if your terminal could tell you that you’re a Night Owl who codes at 2 AM, or a Code Surgeon who deletes more than they write?
git-wrapped is a Python CLI tool that analyzes any Git repository and generates a beautiful, colorful terminal report. No browser, no dashboard, no account — just run a command and see your year in code.
내가 만든 것
git-wrapped — Spotify Wrapped와 비슷하지만 Git 히스토리를 위한 버전.
매년 12월, Spotify는 당신이 어떤 청취자인지 알려줍니다. 나는 코딩에도 같은 것이 필요했어요. 터미널이 당신이 새벽 2시에 코딩하는 야행성 부엉이인지, 쓰기보다 삭제를 더 많이 하는 코드 외과의사인지 알려줄 수 있다면 어떨까요?
git-wrapped는 어떤 Git 저장소든 분석하고 아름답고 컬러풀한 터미널 보고서를 생성하는 Python CLI 도구입니다. 브라우저도, 대시보드도, 계정도 필요 없습니다 — 명령어 하나만 실행하면 당신의 코딩 연도를 확인할 수 있습니다.
전체 기능 세트
- The Numbers — 총 커밋 수, 변경된 파일 수, 추가/삭제된 라인 수, 순 라인 영향, 활동 일수
- Activity Heatmap — 터미널에서 유니코드 블록 문자로 완전히 렌더링된 GitHub 스타일 기여 캘린더
- When You Code — 시간대 및 요일별 막대 차트로 코딩 리듬을 표시
- Top Files — 가장 자주 수정된 파일 순위표
- Languages — 프로그래밍 언어 비율을 퍼센트 막대로 표시
- Streaks & Records — 최장 연속 일수, 현재 연속 일수, 가장 바쁜 하루, 최고 월
- Coder DNA — 커밋 패턴을 기반으로 한 성격 평가: Night Owl, Early Bird, Weekend Warrior, Streak Master, Feature Machine, Code Surgeon, Balanced Builder
- Fun Facts — 휴일 커밋, 가장 길고 짧은 커밋 메시지, 기여자 수, 생산성 통계
- Compare Mode — 연도별 비교 (
--compare 2024 2025)와 변화율 퍼센트 및 성격 변동 추적 - Share Card — 소셜 미디어에 공유할 수 있는 복사‑붙여넣기 가능한 텍스트 카드 (
--share) - JSON Export — 추가 분석이나 통합을 위해 원시 통계를 JSON으로 내보내기
왜 이걸 만들었는가
저는 터미널에서 많은 시간을 보냅니다. 개발자들이 하는 일을 기념할 무언가가 필요했습니다 — 병합된 PR뿐만 아니라, 늦은 밤 디버깅 세션, 주말 사이드 프로젝트, 아무도 눈치채지 못하는 14일 연속 커밋 등도 말이죠.
git-wrapped는 그것을 눈에 보이게 합니다. 그리고 재미있습니다.
데모
GitHub 저장소:
직접 해보기
# Install from PyPI
pip install git-wrapped
# Or install from source
git clone https://github.com/stackmasteraliza/git-wrapped.git
cd git-wrapped
pip install -e .
# Run on any repo
git-wrapped
# Analyze a specific year
git-wrapped --year 2025
# Compare two years
git-wrapped --compare 2024 2025
# Generate a share card
git-wrapped --share
기술 스택
- Python 3.8+ — 핵심 언어
- Rich — 터미널 포맷팅(패널, 테이블, 진행 바, 스타일 텍스트)
- Git log parsing — 파일 수준 통계를 위해
--numstat와--format을 사용한 맞춤 파서 - Zero external API calls — 모든 것이 로컬에서 실행되며, 데이터가 머신을 떠나지 않음
외부 의존성은 하나뿐입니다. 그게 전부입니다.
GitHub Copilot CLI와의 경험
GitHub Copilot CLI는 이 프로젝트 전체 동안 나의 페어 프로그래머였습니다. Stack Overflow, Git 문서, Rich 문서를 탭을 전환하며 찾아다니는 대신, 터미널 안에서 바로 Copilot에게 물어볼 수 있었습니다.
1. git log 형식 이해
첫 번째 과제는 git log에서 구조화된 데이터를 추출하는 방법을 찾는 것이었습니다. Copilot CLI에 --format 플래그를 설명해 달라고 요청했더니, 각 자리 표시자에 대한 명확한 설명을 제공했습니다 — %H는 해시, %an은 작성자 이름, %aI는 ISO 날짜, %s는 제목 라인 — 그리고 --numstat이 파일별 삽입/삭제 통계를 어떻게 추가하는지, >>> 구분자를 사용해 커밋을 신뢰성 있게 파싱할 수 있는 방법까지 알려주었습니다.

2. 커밋 연속일 계산
가장 긴 일일 커밋 연속일을 계산하는 것이 예상보다 까다로웠습니다. 공백을 처리하고, 날짜를 중복 제거하며, 가장 긴 과거 연속일과 현재 진행 중인 연속일을 모두 추적해야 했습니다.
Copilot CLI에 접근 방법을 물어보니 여러 솔루션을 제시했습니다 — datetime.timedelta를 사용해 연속된 날짜를 감지하는 Python 버전과 Bash 원라이너까지. 나는 Python 접근 방식을 바로 분석기에 적용했습니다:
# Copilot이 이 패턴을 만들도록 도와줬습니다
sorted_dates = sorted(set(commit_dates))
streak, max_streak = 1, 1
for i in range(1, len(sorted_dates)):
if (sorted_dates[i] - sorted_dates[i-1]).days == 1:
streak += 1
max_streak = max(max_streak, streak)
else:
streak = 1

3. 시간대별 커밋 그룹화
“When You Code” 차트를 만들기 위해서는 커밋을 24시간 구간으로 나누어야 했습니다. Copilot은 각 커밋 타임스탬프에서 datetime을 사용해 시(hour)를 추출하고, collections.Counter로 이를 집계하는 방법을 제안했습니다. 이렇게 만든 데이터는 Rich의 막대 차트 렌더링에 바로 전달되었습니다.
4. 터미널 히트맵 렌더링
가장 어려운 시각화 작업이었습니다 — GitHub 스타일의 기여 히트맵을 터미널에서 컬러 유니코드 블록으로 구현하는 것이었죠.
Copilot CLI에 Python Rich 라이브러리를 이용한 컬러 히트맵 렌더링 방법을 물어보니 두 가지 접근 방식을 보여줬습니다:
- Table 기반 접근 — Rich의
Table에 컬러 셀을 사용하는 방법. - 블록 문자 접근 — 값에 따라
█문자를 ANSI 색상으로 매핑하는 방법.
나는 두 방식을 결합했습니다 — 색상 관리는 Rich의 Console을 사용하고, 그리드 셀은 블록 문자를 이용했습니다:
colors = ["bright_black", "dark_green", "green", "bright_green"]
char = "█"
for week in range(weeks):
for day in range(7):
intensity = get_intensity(data[week][day])
output += f"[{colors[intensity]}]{char}[/]"

영향
Copilot CLI가 없었다면 각각의 문제를 해결하기 위해 다음과 같은 과정을 거쳐야 했을 것입니다:
- 브라우저를 열기.
- 문서를 스캔하기.
- 관련 예제를 찾기.
- 코드를 적용하기.
- 테스트하기.
이 사이클은 흐름을 끊어버립니다.
Copilot CLI와 함께라면 사이클은 다음과 같이 바뀌었습니다:
- 질문하기 →
- 작동하는 답변 받기 →
- 적용하고 진행하기.
전체 작업을 터미널 안에서 마칠 수 있었고, 인지 부하가 크게 줄어들어 구현 세부 사항에 얽매이기보다 결과물을 즐겁게 만드는 데 집중할 수 있었습니다. 마치 모든 매뉴얼을 머릿속에 외운 파트너와 페어 프로그래밍을 하는 느낌이었습니다.
도전 과제 및 발견
히트맵이 가장 어려운 부분이었습니다.
Ter
성격 감지는 놀라울 정도로 재미있었습니다.
“Coder DNA” 기능은 커밋 패턴을 기반으로 당신에게 성격을 부여합니다. 임계값을 조정하는 과정(예: “오후 10시 이후 커밋이 30 %이면 Night Owl”)에서는 실제 레포지토리 여러 개에 적용해 보면서 라벨이 정확하고 재미있게 느껴지는지 확인해야 했습니다.
Rich는 정말 대단합니다.
Python의 Rich 라이브러리는 패널, 테이블, 진행 바, 색상 텍스트 등 모든 터미널 시각 요소를 담당합니다. 이 덕분에 git‑wrapped가 웹 UI 없이도 깔끔하게 보입니다.
터미널은 픽셀이 없고 문자 그리드에서 각 “셀”이 텍스트 문자입니다. 히트맵을 GitHub의 contribution graph와 비슷하게 만들려면 52 주 × 7 일을 그리드에 매핑하고, 올바른 유니코드 블록 문자를 선택하며, 다양한 터미널 테마에서도 잘 보이는 초록색 음영을 고르는 등 정교한 수학이 필요했습니다.
무엇이 이걸 특별하게 만드는가
개발자를 위해
- 몇 초 만에 코딩 습관을 시각화합니다.
- 자신도 몰랐던 패턴을 발견합니다 (나는 주로 목요일에 코딩한다는 사실).
- 팀 스탠드‑업에서 재미있는 대화 시작점이 됩니다.
팀을 위해
- 공유 레포에 적용해 팀 전체 패턴을 확인합니다.
- 연도별 비교로 팀 리듬의 변화를 추적합니다.
커뮤니티를 위해
- 완전 오픈‑소스 – 포크하고, 확장하고, 직접 사용하세요.
- 단일 의존성 – 어디서든 쉽게 설치 가능합니다.
- 프라이버시 우선 – 모든 것이 로컬에서 실행되며, 데이터가 머신을 떠나지 않습니다.
Python, Rich, 그리고 많은 야간 커밋으로 제작되었습니다. GitHub Copilot CLI로 구동됩니다.
GitHub Repository:
