Skip to content

gogit v0.6.0 Release Notes

Release Date: 2026-07-25

Overview

This release adds four major library features that extend gogit from a commit-log parser into a complete Git analytics toolkit: AI authorship detection, conventional commit parsing, trailer lookup, and generic parallel multi-repo execution. Together these enable consumers like OmniDevX to classify every commit by AI tool, model, and conventional type across hundreds of repositories in parallel.

Highlights

AI authorship detection

A canonical registry of AI coding assistant co-author signatures — Claude Code, GitHub Copilot, Gemini CLI, Cursor, and Aider — with email matching that handles GitHub noreply suffix forms with variable user-ID prefixes.

  • AIProviderByEmail / AIToolByEmail — match an email to a known provider
  • ParseAIModel — extract model identity from names like "Claude Opus 4.6"
  • AnalyzeAuthorship — full attribution breakdown: AI tools, models, and human co-authors
attr := gogit.AnalyzeAuthorship(commit)
if attr.IsAIAuthored {
    fmt.Println("AI tools:", attr.Tools)
    fmt.Println("Models:", attr.Models)
}

Conventional commit parsing

ParseConventionalCommit extracts type, scope, breaking flag, and subject from conventional commit messages. Commit.ParseConventional() is the convenience method on parsed commits.

cc := gogit.ParseConventionalCommit("feat(auth)!: add OAuth2 login")
// cc.Type == "feat", cc.Scope == "auth", cc.Breaking == true

Trailer lookup

Commit.TrailerValue(key) and Commit.TrailerValues(key) provide case-insensitive access to any git trailer — not just Co-authored-by.

rmiRef := commit.TrailerValue("Refs")  // "RMI-FOO-001"

Parallel multi-repo execution

Generic concurrent execution across multiple repositories with configurable worker count, context cancellation, and progress reporting.

  • RunAll[T] — execute a function on each repo path, return ordered results
  • RunAllPaths[T] — lower-level variant for non-repo directories
  • RunAllWithProgress[T] — adds a callback for progress updates
results := gogit.RunAll(ctx, repoPaths, func(ctx context.Context, repo *gogit.Repo) ([]gogit.Commit, error) {
    return repo.Log(ctx, gogit.LogOptions{Since: cutoff})
}, 0)

Incremental log ingestion

LogOptions.SinceCommit limits output to commits reachable from HEAD but not from a given SHA (sha..HEAD), enabling high-water-mark ingestion without date-based filtering. LogOptions.Reverse returns commits in chronological order (oldest first).

Dependencies

  • GitHub Actions checkout bumped from v6 to v7
  • GitHub Actions setup-go bumped from v6 to v7

Installation

Library:

go get github.com/grokify/gogit@v0.6.0

CLI:

go install github.com/grokify/gogit/cmd/gitscan@v0.6.0

Commits

See CHANGELOG.md for the full categorized list with commit links.