# GitFlow Analytics
[](https://badge.fury.io/py/gitflow-analytics)
[](https://pypi.org/project/gitflow-analytics/)
[](https://opensource.org/licenses/MIT)
A Python package for analyzing Git repositories to generate comprehensive developer productivity reports. It extracts data directly from Git history and GitHub APIs, providing weekly summaries, productivity insights, and gap analysis.
## Features
- 🚀 **Multi-repository analysis** with project grouping
- 🏢 **Organization-based repository discovery** from GitHub
- 👥 **Developer identity resolution** and normalization
- 📊 **Work volume analysis** (absolute vs relative effort)
- 🎯 **Story point extraction** from commit messages and PR descriptions
- 🎫 **Multi-platform ticket tracking** (JIRA, GitHub Issues, ClickUp, Linear)
- 📈 **Weekly CSV reports** with productivity metrics
- 🔒 **Data anonymization** for external sharing
- ⚡ **Smart caching** for fast repeated analyses
- 🔄 **Batch processing** for large repositories
## Quick Start
### Installation
**From PyPI (Recommended):**
```bash
pip install gitflow-analytics
```
**From Source (Development):**
```bash
git clone https://github.com/bobmatnyc/gitflow-analytics.git
cd gitflow-analytics
pip install -e ".[dev]"
```
### Basic Usage
1. Create a configuration file (`config.yaml`):
**Option A: Organization-based (Automatic Repository Discovery)**
```yaml
version: "1.0"
github:
token: "${GITHUB_TOKEN}"
organization: "myorg" # Automatically discovers all repositories
analysis:
story_point_patterns:
- "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
- "\\[(\\d+)\\s*(?:sp|pts?)\\]"
```
**Option B: Repository-based (Manual Configuration)**
```yaml
version: "1.0"
github:
token: "${GITHUB_TOKEN}"
owner: "${GITHUB_OWNER}"
repositories:
- name: "frontend"
path: "~/repos/frontend"
github_repo: "myorg/frontend"
project_key: "FRONTEND"
- name: "backend"
path: "~/repos/backend"
github_repo: "myorg/backend"
project_key: "BACKEND"
analysis:
story_point_patterns:
- "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
- "\\[(\\d+)\\s*(?:sp|pts?)\\]"
```
2. Create a `.env` file in the same directory as your `config.yaml`:
```bash
# .env
GITHUB_TOKEN=ghp_your_github_token_here
GITHUB_OWNER=your_github_org # Only for repository-based setup
```
3. Run the analysis:
```bash
gitflow-analytics analyze -c config.yaml
```
## Configuration Options
### Environment Variables and Credentials
GitFlow Analytics automatically loads environment variables from a `.env` file in the same directory as your configuration YAML. This is the recommended approach for managing credentials securely.
#### Step 1: Create a `.env` file
Create a `.env` file next to your configuration YAML:
```bash
# .env file (same directory as your config.yaml)
# GitHub credentials (required)
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
GITHUB_OWNER=myorg # Optional: default owner for repositories
# JIRA credentials (optional - only if using JIRA integration)
JIRA_ACCESS_USER=your.email@company.com
JIRA_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxx
# Other optional tokens
CLICKUP_TOKEN=pk_xxxxxxxxxxxx
LINEAR_TOKEN=lin_api_xxxxxxxxxxxx
```
#### Step 2: Reference in YAML configuration
Use `${VARIABLE_NAME}` syntax in your YAML to reference environment variables:
```yaml
# config.yaml
version: "1.0"
github:
token: "${GITHUB_TOKEN}" # Required
owner: "${GITHUB_OWNER}" # Optional
organization: "${GITHUB_ORG}" # Optional (for org-based discovery)
# Optional: JIRA integration
jira:
access_user: "${JIRA_ACCESS_USER}"
access_token: "${JIRA_ACCESS_TOKEN}"
base_url: "https://yourcompany.atlassian.net"
# Optional: Configure which JIRA fields contain story points
jira_integration:
story_point_fields:
- "Story Points"
- "customfield_10016" # Your custom field ID
```
#### Important Notes:
- **Never commit `.env` files** to version control (add to `.gitignore`)
- If credentials are not found in the `.env` file, the tool will exit with an informative error
- The `.env` file must be in the same directory as your YAML configuration
- All configured services must have corresponding environment variables set
### Organization vs Repository-based Setup
GitFlow Analytics supports two main configuration approaches:
#### Organization-based Configuration (Recommended)
Automatically discovers all non-archived repositories from a GitHub organization:
```yaml
version: "1.0"
github:
token: "${GITHUB_TOKEN}"
organization: "myorg" # Your GitHub organization name
# Optional: Customize analysis settings
analysis:
story_point_patterns:
- "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
exclude:
authors:
- "dependabot[bot]"
- "github-actions[bot]"
```
**Benefits:**
- Automatically discovers new repositories as they're added to the organization
- No need to manually configure each repository
- Simplified configuration management
- Perfect for teams with many repositories
**Requirements:**
- Your GitHub token must have organization read access
- Repositories will be automatically cloned to local directories if they don't exist
#### Repository-based Configuration
Manually specify each repository to analyze:
```yaml
version: "1.0"
github:
token: "${GITHUB_TOKEN}"
owner: "${GITHUB_OWNER}" # Default owner for repositories
repositories:
- name: "frontend"
path: "~/repos/frontend"
github_repo: "myorg/frontend"
project_key: "FRONTEND"
- name: "backend"
path: "~/repos/backend"
github_repo: "myorg/backend"
project_key: "BACKEND"
analysis:
story_point_patterns:
- "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
```
**Benefits:**
- Fine-grained control over which repositories to analyze
- Custom project keys and local paths
- Works with mixed-ownership repositories
- Compatible with existing configurations
### Directory Defaults
GitFlow Analytics now defaults cache and report directories to be relative to the configuration file location:
- **Reports**: Default to same directory as config file (unless overridden with `--output`)
- **Cache**: Default to `.gitflow-cache/` in config file directory
- **Backward compatibility**: Absolute paths in configuration continue to work as before
Example directory structure:
```
/project/
├── config.yaml # Configuration file
├── weekly_metrics.csv # Reports generated here by default
├── summary.csv
└── .gitflow-cache/ # Cache directory
├── gitflow_cache.db
└── identities.db
```
## Command Line Interface
### Main Commands
```bash
# Analyze repositories
gitflow-analytics analyze -c config.yaml --weeks 12 --output ./reports
# Show cache statistics
gitflow-analytics cache-stats -c config.yaml
# List known developers
gitflow-analytics list-developers -c config.yaml
# Merge developer identities
gitflow-analytics merge-identity -c config.yaml dev1_id dev2_id
# Discover JIRA story point fields
gitflow-analytics discover-jira-fields -c config.yaml
```
### Options
- `--weeks, -w`: Number of weeks to analyze (default: 12)
- `--output, -o`: Output directory for reports (default: ./reports)
- `--anonymize`: Anonymize developer information
- `--no-cache`: Disable caching for fresh analysis
- `--clear-cache`: Clear cache before analysis
- `--validate-only`: Validate configuration without running
## Complete Configuration Example
Here's a complete example showing `.env` file and corresponding YAML configuration:
### `.env` file
```bash
# GitHub Configuration
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
GITHUB_ORG=EWTN-Global
# JIRA Configuration
JIRA_ACCESS_USER=developer@ewtn.com
JIRA_ACCESS_TOKEN=ATATT3xxxxxxxxxxx
# Optional: Other integrations
# CLICKUP_TOKEN=pk_xxxxxxxxxxxx
# LINEAR_TOKEN=lin_api_xxxxxxxxxxxx
```
### `config.yaml` file
```yaml
version: "1.0"
# GitHub configuration with organization discovery
github:
token: "${GITHUB_TOKEN}"
organization: "${GITHUB_ORG}"
# JIRA integration for story points
jira:
access_user: "${JIRA_ACCESS_USER}"
access_token: "${JIRA_ACCESS_TOKEN}"
base_url: "https://ewtn.atlassian.net"
jira_integration:
enabled: true
fetch_story_points: true
story_point_fields:
- "Story point estimate" # Your field name
- "customfield_10016" # Fallback field ID
# Analysis configuration
analysis:
# Only track JIRA tickets (ignore GitHub issues, etc.)
ticket_platforms:
- jira
# Exclude bot commits and boilerplate files
exclude:
authors:
- "dependabot[bot]"
- "renovate[bot]"
paths:
- "**/node_modules/**"
- "**/*.min.js"
- "**/package-lock.json"
# Developer identity consolidation
identity:
similarity_threshold: 0.85
manual_mappings:
- primary_email: "john.doe@company.com"
aliases:
- "jdoe@oldcompany.com"
- "john@personal.com"
# Output configuration
output:
directory: "./reports"
formats:
- csv
- markdown
```
## Output Reports
The tool generates three CSV reports:
1. **Weekly Metrics** (`weekly_metrics_YYYYMMDD.csv`)
- Week-by-week developer productivity
- Story points, commits, lines changed
- Ticket coverage percentages
- Per-project breakdown
2. **Summary Statistics** (`summary_YYYYMMDD.csv`)
- Overall project statistics
- Platform-specific ticket counts
- Top contributors
3. **Developer Report** (`developers_YYYYMMDD.csv`)
- Complete developer profiles
- Total contributions
- Identity aliases
## Story Point Patterns
Configure custom regex patterns to match your team's story point format:
```yaml
story_point_patterns:
- "SP: (\\d+)" # SP: 5
- "\\[([0-9]+) pts\\]" # [3 pts]
- "estimate: (\\d+)" # estimate: 8
```
## Ticket Platform Support
Automatically detects and tracks tickets from:
- **JIRA**: `PROJ-123`
- **GitHub**: `#123`, `GH-123`
- **ClickUp**: `CU-abc123`
- **Linear**: `ENG-123`
### JIRA Integration
GitFlow Analytics can fetch story points directly from JIRA tickets. Configure your JIRA instance:
```yaml
jira:
access_user: "${JIRA_ACCESS_USER}"
access_token: "${JIRA_ACCESS_TOKEN}"
base_url: "https://your-company.atlassian.net"
jira_integration:
enabled: true
story_point_fields:
- "Story point estimate" # Your custom field name
- "customfield_10016" # Or use field ID
```
To discover your JIRA story point fields:
```bash
gitflow-analytics discover-jira-fields -c config.yaml
```
## Caching
The tool uses SQLite for intelligent caching:
- Commit analysis results
- Developer identity mappings
- Pull request data
Cache is automatically managed with configurable TTL.
## Developer Identity Resolution
Intelligently merges developer identities across:
- Different email addresses
- Name variations
- GitHub usernames
Manual overrides supported in configuration.
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This project is licensed under the MIT License - see the LICENSE file for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "gitflow-analytics",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "git, analytics, productivity, metrics, development",
"author": null,
"author_email": "Bob Matyas <bobmatnyc@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/4d/cc/7fb1cf0553dac06be4efc24e61ec6d5154b6c4c81dff459833b19022e13e/gitflow_analytics-1.0.3.tar.gz",
"platform": null,
"description": "# GitFlow Analytics\n\n[](https://badge.fury.io/py/gitflow-analytics)\n[](https://pypi.org/project/gitflow-analytics/)\n[](https://opensource.org/licenses/MIT)\n\nA Python package for analyzing Git repositories to generate comprehensive developer productivity reports. It extracts data directly from Git history and GitHub APIs, providing weekly summaries, productivity insights, and gap analysis.\n\n## Features\n\n- \ud83d\ude80 **Multi-repository analysis** with project grouping\n- \ud83c\udfe2 **Organization-based repository discovery** from GitHub\n- \ud83d\udc65 **Developer identity resolution** and normalization\n- \ud83d\udcca **Work volume analysis** (absolute vs relative effort)\n- \ud83c\udfaf **Story point extraction** from commit messages and PR descriptions\n- \ud83c\udfab **Multi-platform ticket tracking** (JIRA, GitHub Issues, ClickUp, Linear)\n- \ud83d\udcc8 **Weekly CSV reports** with productivity metrics\n- \ud83d\udd12 **Data anonymization** for external sharing\n- \u26a1 **Smart caching** for fast repeated analyses\n- \ud83d\udd04 **Batch processing** for large repositories\n\n## Quick Start\n\n### Installation\n\n**From PyPI (Recommended):**\n\n```bash\npip install gitflow-analytics\n```\n\n**From Source (Development):**\n\n```bash\ngit clone https://github.com/bobmatnyc/gitflow-analytics.git\ncd gitflow-analytics\npip install -e \".[dev]\"\n```\n\n### Basic Usage\n\n1. Create a configuration file (`config.yaml`):\n\n**Option A: Organization-based (Automatic Repository Discovery)**\n```yaml\nversion: \"1.0\"\n\ngithub:\n token: \"${GITHUB_TOKEN}\"\n organization: \"myorg\" # Automatically discovers all repositories\n\nanalysis:\n story_point_patterns:\n - \"(?:story\\\\s*points?|sp|pts?)\\\\s*[:=]\\\\s*(\\\\d+)\"\n - \"\\\\[(\\\\d+)\\\\s*(?:sp|pts?)\\\\]\"\n```\n\n**Option B: Repository-based (Manual Configuration)**\n```yaml\nversion: \"1.0\"\n\ngithub:\n token: \"${GITHUB_TOKEN}\"\n owner: \"${GITHUB_OWNER}\"\n\nrepositories:\n - name: \"frontend\"\n path: \"~/repos/frontend\"\n github_repo: \"myorg/frontend\"\n project_key: \"FRONTEND\"\n \n - name: \"backend\"\n path: \"~/repos/backend\"\n github_repo: \"myorg/backend\"\n project_key: \"BACKEND\"\n\nanalysis:\n story_point_patterns:\n - \"(?:story\\\\s*points?|sp|pts?)\\\\s*[:=]\\\\s*(\\\\d+)\"\n - \"\\\\[(\\\\d+)\\\\s*(?:sp|pts?)\\\\]\"\n```\n\n2. Create a `.env` file in the same directory as your `config.yaml`:\n\n```bash\n# .env\nGITHUB_TOKEN=ghp_your_github_token_here\nGITHUB_OWNER=your_github_org # Only for repository-based setup\n```\n\n3. Run the analysis:\n\n```bash\ngitflow-analytics analyze -c config.yaml\n```\n\n## Configuration Options\n\n### Environment Variables and Credentials\n\nGitFlow Analytics automatically loads environment variables from a `.env` file in the same directory as your configuration YAML. This is the recommended approach for managing credentials securely.\n\n#### Step 1: Create a `.env` file\n\nCreate a `.env` file next to your configuration YAML:\n\n```bash\n# .env file (same directory as your config.yaml)\n# GitHub credentials (required)\nGITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx\nGITHUB_OWNER=myorg # Optional: default owner for repositories\n\n# JIRA credentials (optional - only if using JIRA integration)\nJIRA_ACCESS_USER=your.email@company.com\nJIRA_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxx\n\n# Other optional tokens\nCLICKUP_TOKEN=pk_xxxxxxxxxxxx\nLINEAR_TOKEN=lin_api_xxxxxxxxxxxx\n```\n\n#### Step 2: Reference in YAML configuration\n\nUse `${VARIABLE_NAME}` syntax in your YAML to reference environment variables:\n\n```yaml\n# config.yaml\nversion: \"1.0\"\n\ngithub:\n token: \"${GITHUB_TOKEN}\" # Required\n owner: \"${GITHUB_OWNER}\" # Optional\n organization: \"${GITHUB_ORG}\" # Optional (for org-based discovery)\n\n# Optional: JIRA integration\njira:\n access_user: \"${JIRA_ACCESS_USER}\"\n access_token: \"${JIRA_ACCESS_TOKEN}\"\n base_url: \"https://yourcompany.atlassian.net\"\n\n# Optional: Configure which JIRA fields contain story points\njira_integration:\n story_point_fields:\n - \"Story Points\"\n - \"customfield_10016\" # Your custom field ID\n```\n\n#### Important Notes:\n\n- **Never commit `.env` files** to version control (add to `.gitignore`)\n- If credentials are not found in the `.env` file, the tool will exit with an informative error\n- The `.env` file must be in the same directory as your YAML configuration\n- All configured services must have corresponding environment variables set\n\n### Organization vs Repository-based Setup\n\nGitFlow Analytics supports two main configuration approaches:\n\n#### Organization-based Configuration (Recommended)\n\nAutomatically discovers all non-archived repositories from a GitHub organization:\n\n```yaml\nversion: \"1.0\"\n\ngithub:\n token: \"${GITHUB_TOKEN}\"\n organization: \"myorg\" # Your GitHub organization name\n\n# Optional: Customize analysis settings\nanalysis:\n story_point_patterns:\n - \"(?:story\\\\s*points?|sp|pts?)\\\\s*[:=]\\\\s*(\\\\d+)\"\n \n exclude:\n authors:\n - \"dependabot[bot]\"\n - \"github-actions[bot]\"\n```\n\n**Benefits:**\n- Automatically discovers new repositories as they're added to the organization\n- No need to manually configure each repository\n- Simplified configuration management\n- Perfect for teams with many repositories\n\n**Requirements:**\n- Your GitHub token must have organization read access\n- Repositories will be automatically cloned to local directories if they don't exist\n\n#### Repository-based Configuration\n\nManually specify each repository to analyze:\n\n```yaml\nversion: \"1.0\"\n\ngithub:\n token: \"${GITHUB_TOKEN}\"\n owner: \"${GITHUB_OWNER}\" # Default owner for repositories\n\nrepositories:\n - name: \"frontend\"\n path: \"~/repos/frontend\"\n github_repo: \"myorg/frontend\"\n project_key: \"FRONTEND\"\n \n - name: \"backend\"\n path: \"~/repos/backend\"\n github_repo: \"myorg/backend\"\n project_key: \"BACKEND\"\n\nanalysis:\n story_point_patterns:\n - \"(?:story\\\\s*points?|sp|pts?)\\\\s*[:=]\\\\s*(\\\\d+)\"\n```\n\n**Benefits:**\n- Fine-grained control over which repositories to analyze\n- Custom project keys and local paths\n- Works with mixed-ownership repositories\n- Compatible with existing configurations\n\n### Directory Defaults\n\nGitFlow Analytics now defaults cache and report directories to be relative to the configuration file location:\n\n- **Reports**: Default to same directory as config file (unless overridden with `--output`)\n- **Cache**: Default to `.gitflow-cache/` in config file directory\n- **Backward compatibility**: Absolute paths in configuration continue to work as before\n\nExample directory structure:\n```\n/project/\n\u251c\u2500\u2500 config.yaml # Configuration file\n\u251c\u2500\u2500 weekly_metrics.csv # Reports generated here by default\n\u251c\u2500\u2500 summary.csv\n\u2514\u2500\u2500 .gitflow-cache/ # Cache directory\n \u251c\u2500\u2500 gitflow_cache.db\n \u2514\u2500\u2500 identities.db\n```\n\n## Command Line Interface\n\n### Main Commands\n\n```bash\n# Analyze repositories\ngitflow-analytics analyze -c config.yaml --weeks 12 --output ./reports\n\n# Show cache statistics\ngitflow-analytics cache-stats -c config.yaml\n\n# List known developers\ngitflow-analytics list-developers -c config.yaml\n\n# Merge developer identities\ngitflow-analytics merge-identity -c config.yaml dev1_id dev2_id\n\n# Discover JIRA story point fields\ngitflow-analytics discover-jira-fields -c config.yaml\n```\n\n### Options\n\n- `--weeks, -w`: Number of weeks to analyze (default: 12)\n- `--output, -o`: Output directory for reports (default: ./reports)\n- `--anonymize`: Anonymize developer information\n- `--no-cache`: Disable caching for fresh analysis\n- `--clear-cache`: Clear cache before analysis\n- `--validate-only`: Validate configuration without running\n\n## Complete Configuration Example\n\nHere's a complete example showing `.env` file and corresponding YAML configuration:\n\n### `.env` file\n```bash\n# GitHub Configuration\nGITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx\nGITHUB_ORG=EWTN-Global\n\n# JIRA Configuration\nJIRA_ACCESS_USER=developer@ewtn.com\nJIRA_ACCESS_TOKEN=ATATT3xxxxxxxxxxx\n\n# Optional: Other integrations\n# CLICKUP_TOKEN=pk_xxxxxxxxxxxx\n# LINEAR_TOKEN=lin_api_xxxxxxxxxxxx\n```\n\n### `config.yaml` file\n```yaml\nversion: \"1.0\"\n\n# GitHub configuration with organization discovery\ngithub:\n token: \"${GITHUB_TOKEN}\"\n organization: \"${GITHUB_ORG}\"\n\n# JIRA integration for story points\njira:\n access_user: \"${JIRA_ACCESS_USER}\"\n access_token: \"${JIRA_ACCESS_TOKEN}\"\n base_url: \"https://ewtn.atlassian.net\"\n\njira_integration:\n enabled: true\n fetch_story_points: true\n story_point_fields:\n - \"Story point estimate\" # Your field name\n - \"customfield_10016\" # Fallback field ID\n\n# Analysis configuration\nanalysis:\n # Only track JIRA tickets (ignore GitHub issues, etc.)\n ticket_platforms:\n - jira\n \n # Exclude bot commits and boilerplate files\n exclude:\n authors:\n - \"dependabot[bot]\"\n - \"renovate[bot]\"\n paths:\n - \"**/node_modules/**\"\n - \"**/*.min.js\"\n - \"**/package-lock.json\"\n \n # Developer identity consolidation\n identity:\n similarity_threshold: 0.85\n manual_mappings:\n - primary_email: \"john.doe@company.com\"\n aliases:\n - \"jdoe@oldcompany.com\"\n - \"john@personal.com\"\n\n# Output configuration\noutput:\n directory: \"./reports\"\n formats:\n - csv\n - markdown\n```\n\n## Output Reports\n\nThe tool generates three CSV reports:\n\n1. **Weekly Metrics** (`weekly_metrics_YYYYMMDD.csv`)\n - Week-by-week developer productivity\n - Story points, commits, lines changed\n - Ticket coverage percentages\n - Per-project breakdown\n\n2. **Summary Statistics** (`summary_YYYYMMDD.csv`)\n - Overall project statistics\n - Platform-specific ticket counts\n - Top contributors\n\n3. **Developer Report** (`developers_YYYYMMDD.csv`)\n - Complete developer profiles\n - Total contributions\n - Identity aliases\n\n## Story Point Patterns\n\nConfigure custom regex patterns to match your team's story point format:\n\n```yaml\nstory_point_patterns:\n - \"SP: (\\\\d+)\" # SP: 5\n - \"\\\\[([0-9]+) pts\\\\]\" # [3 pts]\n - \"estimate: (\\\\d+)\" # estimate: 8\n```\n\n## Ticket Platform Support\n\nAutomatically detects and tracks tickets from:\n- **JIRA**: `PROJ-123`\n- **GitHub**: `#123`, `GH-123`\n- **ClickUp**: `CU-abc123`\n- **Linear**: `ENG-123`\n\n### JIRA Integration\n\nGitFlow Analytics can fetch story points directly from JIRA tickets. Configure your JIRA instance:\n\n```yaml\njira:\n access_user: \"${JIRA_ACCESS_USER}\"\n access_token: \"${JIRA_ACCESS_TOKEN}\"\n base_url: \"https://your-company.atlassian.net\"\n\njira_integration:\n enabled: true\n story_point_fields:\n - \"Story point estimate\" # Your custom field name\n - \"customfield_10016\" # Or use field ID\n```\n\nTo discover your JIRA story point fields:\n```bash\ngitflow-analytics discover-jira-fields -c config.yaml\n```\n\n## Caching\n\nThe tool uses SQLite for intelligent caching:\n- Commit analysis results\n- Developer identity mappings\n- Pull request data\n\nCache is automatically managed with configurable TTL.\n\n## Developer Identity Resolution\n\nIntelligently merges developer identities across:\n- Different email addresses\n- Name variations\n- GitHub usernames\n\nManual overrides supported in configuration.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Analyze Git repositories for developer productivity insights",
"version": "1.0.3",
"project_urls": {
"Documentation": "https://github.com/bobmatnyc/gitflow-analytics/blob/main/README.md",
"Homepage": "https://github.com/bobmatnyc/gitflow-analytics",
"Issues": "https://github.com/bobmatnyc/gitflow-analytics/issues",
"Repository": "https://github.com/bobmatnyc/gitflow-analytics"
},
"split_keywords": [
"git",
" analytics",
" productivity",
" metrics",
" development"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "16f9ce15537ec2bf9752bf58f94a8f406cd4731bb97f1f5ab2bc2388d00a7132",
"md5": "8e7bcf9310bde130140807a4ada5e55d",
"sha256": "087727e073e0d5955c510c4dcfcb17a4beee9f4da14041ce71b9363b6402d908"
},
"downloads": -1,
"filename": "gitflow_analytics-1.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8e7bcf9310bde130140807a4ada5e55d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 157494,
"upload_time": "2025-08-01T17:19:59",
"upload_time_iso_8601": "2025-08-01T17:19:59.593600Z",
"url": "https://files.pythonhosted.org/packages/16/f9/ce15537ec2bf9752bf58f94a8f406cd4731bb97f1f5ab2bc2388d00a7132/gitflow_analytics-1.0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4dcc7fb1cf0553dac06be4efc24e61ec6d5154b6c4c81dff459833b19022e13e",
"md5": "e2ce7e43739dd0c8d435acc68280ccd4",
"sha256": "a85e95aabd336a593dbbdaa6099e1773164a0b6b2cb4fafca23f0b3cdce21eb2"
},
"downloads": -1,
"filename": "gitflow_analytics-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "e2ce7e43739dd0c8d435acc68280ccd4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 178772,
"upload_time": "2025-08-01T17:20:00",
"upload_time_iso_8601": "2025-08-01T17:20:00.799012Z",
"url": "https://files.pythonhosted.org/packages/4d/cc/7fb1cf0553dac06be4efc24e61ec6d5154b6c4c81dff459833b19022e13e/gitflow_analytics-1.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-01 17:20:00",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "bobmatnyc",
"github_project": "gitflow-analytics",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "gitflow-analytics"
}