Pywayne Bin Gitstats
Analyze Git repository commit time distribution and generate visualizations.
Quick Start
# Analyze current repository (default: current directory, current branch)
gitstats
# Specify custom output path
gitstats --save output.png
# Analyze with time filter
gitstats --since "2024-01-01"
Usage Examples
Basic Analysis
# Analyze current repository
gitstats
# Analyze specific repository path
gitstats /path/to/repo
# Show plot in popup window (no file saved)
gitstats -p
Time Range Filtering
# Commits since specific date
gitstats --since "2024-01-01"
# Commits within date range
gitstats --since "2024-01-01" --until "2024-12-31"
# Relative time expressions
gitstats --since "1 year ago"
gitstats --since "90 days ago"
gitstats --until "30 days ago"
Branch Selection
# Analyze specific branch
gitstats --branch main
gitstats --branch develop
gitstats --branch origin/main
# Analyze all branches
gitstats --all
Timezone Configuration
# Use UTC timezone
gitstats --tz UTC
# Use specific timezone
gitstats --tz "America/New_York"
gitstats --tz "Europe/London"
# Default is Asia/Shanghai
gitstats --tz "Asia/Shanghai"
Custom Output
# Custom output filename
gitstats --save my_stats.png
# Output to subdirectory
gitstats --save results/commit_analysis.png
# Absolute path
gitstats --save /tmp/git_stats.png
Combined Examples
# All branches, last year, custom output
gitstats --since "1 year ago" --all --save yearly_stats.png
# Main branch, last 90 days, UTC timezone
gitstats --branch main --since "90 days ago" --tz UTC
# Develop branch, date range, show plot
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
--allis specified, all branches are analyzed - If
--branchis 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
--allmay 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-cjkon Ubuntu