name: agent-ops-git-analysis description: "Analyze git repository for insights: contributor stats, commit patterns, branch health, and change analysis. Outputs actionable reports." license: MIT compatibility: [opencode, claude, cursor]
metadata: category: git
Git Analysis Skill
Generate repository insights and health reports from git history.
Commands
All analysis uses standard git commands. No external dependencies required.
Quick Stats
# Total commits
git rev-list --count HEAD
# Contributors count
git shortlog -sn --all | wc -l
# First and last commit dates
git log --reverse --format=%ci | head -1
git log -1 --format=%ci
# Files in repository
git ls-files | wc -l
# Lines of code (approximate)
git ls-files | xargs wc -l 2>/dev/null | tail -1
Contributor Analysis
# Commits per author
git shortlog -sn --all
# Commits per author (last 30 days)
git shortlog -sn --since="30 days ago"
# Most active files by author
git log --author="Name" --name-only --pretty=format: | sort | uniq -c | sort -rn | head -20
Commit Patterns
# Commits by day of week
git log --format=%ad --date=format:%A | sort | uniq -c | sort -rn
# Commits by hour
git log --format=%ad --date=format:%H | sort | uniq -c | sort -n
# Commits per month (last year)
git log --since="1 year ago" --format=%ad --date=format:%Y-%m | sort | uniq -c
# Average commits per day (last 30 days)
# commits / 30
Branch Health
# List all branches with last commit date
git for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(refname:short)'
# Stale branches (no commits in 90 days)
git for-each-ref --sort=committerdate refs/heads/ --format='%(committerdate:iso) %(refname:short)' | while read date branch; do
if [[ $(date -d "$date" +%s) -lt $(date -d "90 days ago" +%s) ]]; then
echo "STALE: $branch (last: $date)"
fi
done
# Merged branches (candidates for deletion)
git branch --merged main | grep -v main
# Branches ahead/behind main
git for-each-ref --format='%(refname:short) %(upstream:track)' refs/heads
Large Files Detection
# Find large files in history
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
sed -n 's/^blob //p' | \
sort -rnk2 | \
head -20
# Current large files
git ls-files | xargs ls -la 2>/dev/null | sort -rnk5 | head -20
Change Analysis
# Files most frequently changed (churn)
git log --name-only --pretty=format: | sort | uniq -c | sort -rn | head -20
# Recent hotspots (last 30 days)
git log --since="30 days ago" --name-only --pretty=format: | sort | uniq -c | sort -rn | head -20
# Diff stats between branches
git diff --stat main..feature-branch
# Changed files between commits
git diff --name-status <commit1> <commit2>
Report Templates
Quick Health Report
# Repository Health Report
Generated: {date}
## Overview
- **Total Commits**: {count}
- **Contributors**: {count}
- **Age**: {first_commit_date} to {last_commit_date}
- **Files**: {file_count}
## Activity (Last 30 Days)
- Commits: {count}
- Active Contributors: {count}
- Most Changed Files:
1. {file} ({changes} changes)
2. ...
## Branch Status
- Active Branches: {count}
- Stale Branches (>90 days): {count}
- Merged (deletable): {count}
## Hotspots
Files with highest churn (potential refactoring candidates):
1. {file} - {change_count} changes
2. ...
## Recommendations
- {recommendations}
Contributor Report
# Contributor Activity Report
Generated: {date}
Period: {start_date} to {end_date}
## Summary
| Contributor | Commits | Lines Added | Lines Removed |
|-------------|---------|-------------|---------------|
| {name} | {count} | +{added} | -{removed} |
## Activity by Day
{chart or table}
## Focus Areas
Most modified files per contributor...
Diff Report
# Change Analysis: {branch1} → {branch2}
Generated: {date}
## Summary
- Files Changed: {count}
- Lines Added: +{added}
- Lines Removed: -{removed}
## Changed Files
| File | Status | +/- |
|------|--------|-----|
| {path} | Modified | +{a}/-{r} |
## High-Impact Changes
Files with >100 lines changed...
Invocation
When user asks for repository analysis:
-
Determine scope:
- Full repository or specific branch?
- Time period (all time, last N days)?
- Focus area (contributors, health, changes)?
-
Run appropriate commands
-
Generate report using templates above
-
Highlight actionable items:
- Stale branches to delete
- Large files to consider removing
- High-churn files that may need refactoring
- Missing recent activity
Example Invocations
User: "How healthy is this repo?" → Generate Quick Health Report
User: "Who's been most active this month?" → Generate Contributor Report for last 30 days
User: "What changed between main and feature-x?" → Generate Diff Report
User: "Any branches we should clean up?" → Run branch health commands, list candidates
Notes
- All commands work with standard git (no external tools required)
- Commands are cross-platform (adjust date commands for Windows)
- Large repositories may need pagination/sampling for performance
- Respect
.gitignorewhen analyzing files