| name | pywayne-bin-gitstats |
| description | Analyze and visualize Git commit time distribution. Use when users need to analyze Git repository commit patterns, generate commit statistics, visualize commit activity by time, hour, or weekday. Triggered by requests to analyze commits, show commit distribution, visualize Git activity, or generate commit time statistics. |
Pywayne Bin Gitstats
Analyze Git repository commit time distribution and generate visualizations.
Quick Start
gitstats
gitstats --save output.png
gitstats --since "2024-01-01"
Usage Examples
Basic Analysis
gitstats
gitstats /path/to/repo
gitstats -p
Time Range Filtering
gitstats --since "2024-01-01"
gitstats --since "2024-01-01" --until "2024-12-31"
gitstats --since "1 year ago"
gitstats --since "90 days ago"
gitstats --until "30 days ago"
Branch Selection
gitstats --branch main
gitstats --branch develop
gitstats --branch origin/main
gitstats --all
Timezone Configuration
gitstats --tz UTC
gitstats --tz "America/New_York"
gitstats --tz "Europe/London"
gitstats --tz "Asia/Shanghai"
Custom Output
gitstats --save my_stats.png
gitstats --save results/commit_analysis.png
gitstats --save /tmp/git_stats.png
Combined Examples
gitstats --since "1 year ago" --all --save yearly_stats.png
gitstats --branch main --since "90 days ago" --tz UTC
gitstats --branch develop --since "2024-01-01" --until "2024-06-30" -p
Command Reference
| Argument | Description |
|---|
repo | Git repository path. Default: current directory |
--since | Start time (e.g., "2024-01-01", "1 year ago", "90 days ago") |
--until | End time (same formats as --since) |
--tz | Timezone. Default: "Asia/Shanghai". Examples: "UTC", "America/New_York" |
--branch | Specific branch to analyze. Examples: "main", "develop", "origin/main" |
--all | Analyze all branches (overrides --branch) |
--save | Output image path. Default: "git_time_distribution.png" |
-p, --show-plot | Show plot in popup window without saving file |
Output Charts
Generates a compact 11×7.2-inch, Seaborn-styled activity dashboard. Labels are
Chinese when a font with the required CJK glyphs is available, and automatically
fall back to English otherwise:
- Commit trend - Automatically aggregates by day for spans up to 180 days,
by week for spans up to three years, and by month for longer histories
- Commits by hour - Bar chart for hours 0-23 with labels every three hours
- Commits by weekday - Bar chart for Monday-Sunday
- Weekday × hour heatmap - Activity matrix with labels every two hours
The header includes the repository name, branch, timezone, date range, total commits,
and active-day count. The busiest hour and weekday are highlighted. Font selection
checks actual glyph coverage instead of relying only on family names, including
Ubuntu families such as Noto Sans CJK JP and Droid Sans Fallback. Dates use numeric,
locale-independent formatting, and tick density is limited to avoid overlap.
Branch Selection Priority
- If
--all is specified, all branches are analyzed
- If
--branch is specified, only that branch is analyzed
- If neither is specified, current HEAD branch is used
Requirements
- Git must be installed
- Python dependencies: pandas, matplotlib, seaborn (installed with pywayne)
Notes
- Time range can use Git's flexible date formats (absolute dates, relative expressions)
- Output file is overwritten if it exists
- Large repositories with
--all may take longer to process
- Commit times are parsed in UTC, then converted to specified timezone
- Saved charts use 160 DPI and a compact light Git-inspired dashboard theme
- Without a CJK-capable font, labels automatically switch to English and a warning
suggests
sudo apt install fonts-noto-cjk on Ubuntu