2026 와커톤 참가팀의 Git 커밋 로그를 수집하고, 협업 흐름을 시각적으로 분석하는 프로젝트입니다.
https://yabsed.github.io/localhost-commit-analysis/
- 단일 JSON 데이터(
commit_crawler/json/*.json)를 선택해 상세 분석 - 타임라인: 커밋 시간순 배치 + 프로젝트 간 선후 관계 + 작성자 크로스 이동선
- 누적 스택 차트:
- 커밋 수 / 라인 수 전환
- 레포 기여율(%) 모드
- 긴 커밋 상위 N% 제외
- 0줄 변경 커밋 제외(커밋 모드) / 순변경(+/-) 계산(라인 모드)
- 시간 추이 차트:
- 레포별/사용자별 누적 추이
- 현재 타임라인 위치 기준 Reference 라인 표시
- 작성자 병합 규칙(.txt) 파일 선택/재로딩/즉시 적용 지원
- 데이터 소스 URL 고정:
?source=<파일명>.json
commit_crawler/json/*.json파일들을 팀 단위로 동시 로드해 비교- 분석 시점 윈도우:
2026-02-21 15:00:00 +09:00~2026-02-22 09:00:00 +09:00 - 시점 다이얼(슬라이더/휠)로 특정 시점 랭킹과 그래프를 동기화
- 옵션:
- 긴 커밋 상위 N% 제외
- 0줄 변경 커밋 제외(커밋 모드) / 순변경(+/-) 계산(라인 모드)
- 오후 3시 이전 준비 커밋 포함
- 우측 그래프 모드:
- 사용자 순위(
+8,-8같은 토큰 입력으로 Top/Bottom 라인 선택) - 팀별 순위(
+8,-8같은 토큰 입력으로 Top/Bottom 라인 선택) - 레포 순위(
+8,-8같은 토큰 입력으로 Top/Bottom 라인 선택) - 프런트 vs 백엔드 누적 추이(레포명 기준 분류)
- 사용자 순위(
- 팀 제거 목록(특정 팀 제외) 지원
/: Team Review/team-battle또는/battle: Team Battle- 해시 라우팅도 지원 (
#/team-battle,#/battle)
.
├─ commit_crawler/
│ ├─ commit_crawler.py # 전체 파이프라인 실행
│ ├─ input.txt # 분석 대상 레포 목록
│ ├─ workers/
│ │ ├─ crawl_git_logs.py # git log 수집
│ │ └─ merge_git_logs_to_json.py # 로그 병합(JSON 생성)
│ └─ json/ # 앱에서 읽는 분석 데이터(.json)
├─ interactive_app/
│ ├─ src/ # 시각화 앱 코드
│ ├─ scripts/prepare-static-data.mjs # 정적 배포용 데이터 복사 + manifest 생성
│ ├─ author_identity_rules.txt # 기본 작성자 병합 규칙 파일
│ ├─ public/data/ # prepare:data 결과물
│ └─ package.json
└─ .github/workflows/deploy-interactive-app.yml
- Node.js 20+
- npm
- Python 3.10+
- Git CLI
- 커밋 데이터 생성/갱신
python3 commit_crawler/commit_crawler.py- 프런트 실행
cd interactive_app
npm ci
npm run dev- 접속
- Team Review:
http://localhost:5173/ - Team Battle:
http://localhost:5173/team-battle
GET /api/commit-logsGET /api/commit-log?file=<name>.jsonGET /api/identity-rule-filesGET /api/identity-rule-file?file=<name>.txt
한 줄에 하나씩 입력합니다.
https://github.com/owner/repo.githttps://github.com/owner/repoowner/repo(자동으로 GitHub URL 변환)owner/repo -> backend(source alias 지정)- 로컬 경로도 호환 지원
python3 commit_crawler/commit_crawler.py \
--force \
--no-prune \
--disable-cutoff-filter--force: 기존.txt가 있어도 다시 수집--no-prune: 현재input.txt에 없는 오래된 로그 파일 자동 정리 비활성화--disable-cutoff-filter: 병합 시 컷오프 필터 비활성화
기본값은 2026-02-22 09:00:00 +09:00 이후 커밋을 병합 JSON에서 제외합니다.
interactive_app/*.txt 파일을 규칙 파일로 사용합니다.
사용자A - 사용자B사용자A -> 사용자B사용자A,사용자B사용자A<TAB>사용자B
주석(#)과 빈 줄은 무시됩니다. 형식 오류 줄은 경고 후 제외됩니다.
cd interactive_app
npm run buildnpm run build는 내부에서 npm run prepare:data를 먼저 실행합니다.
commit_crawler/json/*.json->interactive_app/public/data/commit-logs/interactive_app/*.txt->interactive_app/public/data/identity-rules/interactive_app/public/data/manifest.json생성
cd interactive_app
npm run build:pages- base path:
/localhost-commit-analysis/ dist/index.html을dist/404.html로 복사해 새로고침 라우팅 대응- 워크플로우:
.github/workflows/deploy-interactive-app.yml
- 와커톤 소개: https://jet-coral-9d0.notion.site/2026-2e770e37e9c7801e8994e43d9ae6a3cf
- 크롤러 상세 설명:
commit_crawler/README.md

