Skip to main content

Git Timesheet Generator

A Python package to generate git timesheets from commit history, specifically filtering for commits by a particular author.

Overview

This tool analyzes git commit history across multiple repositories and:

  • Filters commits by author name/email
  • Estimates time spent on each commit (in 15-minute increments)
  • Adjusts time based on commit message keywords
  • Groups work by day and week
  • Formats output as a readable timesheet

Requirements

  • Python 3.8+
  • pytz library
  • click library

Installation

From PyPI

# Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install the package
pip install git-timesheet

From Source

# Clone the repository
git clone https://github.com/mcgarrah/git-timesheet.git
cd git-timesheet

# Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install in development mode
pip install -e .

Configuration

The tool supports configuration files to set default values. It looks for configuration files in the following locations (in order of precedence):

  1. .ggtsrc in the current directory
  2. ggts.ini in the current directory
  3. .ggtsrc in the user's home directory
  4. ggts.ini in the user's .config directory
  5. config.ini in the user's .config/git-timesheet directory

You can create a configuration file using the ggts init command, or manually create one with the following format:

[defaults]
# Author pattern to filter commits
author = michael mcgarrah

# Default timezone for dates
timezone = US/Eastern

# Minutes between commits to consider them part of the same work session
session_timeout = 60

Command-line arguments always override values from configuration files.

Usage

# Generate a timesheet (default command)
ggts [OPTIONS]
# or explicitly
ggts generate [OPTIONS]

# Initialize configuration
ggts --init
# or
ggts init

Options

  • --base-dir PATH: Base directory containing git repositories (default: current directory)
  • --since DATE: Show commits more recent than a specific date (e.g., "2 weeks ago")
  • --until DATE: Show commits older than a specific date
  • --repos REPO: Specific repository names to include (can be used multiple times)
  • --output FORMAT: Output format (text, csv, markdown, or md, default: text)
  • --author PATTERN: Filter commits by author (default from config or "mcgarrah")
  • --timezone TIMEZONE: Timezone for dates (default from config or "UTC")
  • --output-file PATH: Write output to file instead of stdout
  • --session-timeout MINUTES: Minutes between commits to consider them part of the same work session (default from config or 60)

Examples

Generate timesheet for the last 2 weeks

# Using default command
ggts --since="2 weeks ago"
# or explicitly
ggts generate --since="2 weeks ago"

Generate timesheet for specific repositories

ggts generate --repos food_service_nutrition --repos food-intelligence-app --since="1 month ago"

Generate timesheet for a specific date range

ggts generate --since="2023-01-01" --until="2023-01-31"

Generate timesheet with specific author pattern

ggts generate --author="michael mcgarrah" --since="2 weeks ago"

Generate timesheet in US Eastern timezone

ggts generate --since="1 month ago" --timezone="US/Eastern"

Generate CSV output for spreadsheet import

ggts generate --since="1 month ago" --output=csv --output-file=timesheet.csv

Generate markdown output for pretty formatting

ggts generate --since="1 month ago" --output=markdown --output-file=timesheet.md

Initialize configuration

# Using the dedicated command
ggts init
# or using the flag
ggts --init

Output Formats

Text Format

Plain text output organized by weeks and days, showing detailed commit information with timezone abbreviations.

CSV Format

Comma-separated values format suitable for importing into spreadsheet applications like Excel or Google Sheets. Includes timezone information for each entry.

Markdown Format

Pretty markdown format with tables organized by week, suitable for viewing in markdown readers or converting to HTML. Includes time ranges and timezone abbreviations for each task to better understand work sessions.

Time Estimation Logic

  • Base time: 15 minutes per commit
  • Bug fixes/issues: +15 minutes
  • New features/implementations: +30 minutes
  • Refactoring/improvements: +15 minutes
  • Commits close together (within 60 minutes by default) are considered part of the same work session

Timezone Support

The tool supports various timezone formats:

  • IANA timezone names (e.g., "America/New_York")
  • Common US timezone aliases (e.g., "US/Eastern")
  • Short timezone abbreviations (e.g., "EST", "EDT")
  • Prefixed short timezone abbreviations (e.g., "US/EST")

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/mcgarrah/git-timesheet.git
cd git-timesheet

# Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install development dependencies
pip install -e ".[dev]"

Testing

The project includes a comprehensive test suite using pytest. To run the tests:

# Run all tests
pytest

# Run with coverage report
pytest --cov=git_timesheet

# Run a specific test file
pytest tests/test_timezone.py

Test Structure

  • Unit Tests: Test individual functions in isolation

    • test_timezone.py: Tests for timezone conversion and abbreviation
    • test_git_operations.py: Tests for git repository detection and log retrieval
    • test_formatting.py: Tests for output formatting functions
  • Integration Tests: Test the entire workflow

    • test_integration.py: End-to-end tests using temporary git repositories

Building Documentation

pip install -e ".[docs]"
cd docs
make html

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.

Metadata

Release files for git-timesheet 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for git-timesheet 0.1.3
File Size Uploaded Provenance
git_timesheet-0.1.3.tar.gz 22.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for git-timesheet 0.1.3
File Interpreter ABI Platform
git_timesheet-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 41.2 kB

Release files / git_timesheet-0.1.3.tar.gz

Download URL git_timesheet-0.1.3.tar.gz
Size 22.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a4e3c66921a1f04a74e844c1b1706b7cb8d533354a2f07a8c0a4afdf84dafb01
BLAKE2b-256 checksum
How to use checksums
c2624958713e156d16c8fc1ae70159a6f0b5e0deecdfc2ac60a3f81ecb489b12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / git_timesheet-0.1.3-py3-none-any.whl

Download URL git_timesheet-0.1.3-py3-none-any.whl
Size 18.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f46506bb56b8d74c2c3b3544ae67ab947c426c76f15606455be29d21cf703597
BLAKE2b-256 checksum
How to use checksums
b72cad02f41331b70eb4a19c7f3f38f032be2a9695382d674b18a73b700f10e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Security for git-timesheet 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page