# go-git/go-git

A highly extensible Git implementation in pure Go.

Repository: https://github.com/go-git/go-git
Canonical: https://ross.abutalabs.com/products/go-git
Homepage: https://pkg.go.dev/github.com/go-git/go-git/v6
Language: Go
License: Apache-2.0
License Family: permissive
Topics: git, git-client, git-server, go-git, golang, git-library
Last push: 2026-08-26T05:09:13+00:00

## Health v2 (maintenance only)
Score: 98/100 (v2, computed 2026-09-02T17:46:02.011165+00:00)
- activity 99, release rhythm 95, longevity 100
- inputs: {"age_days": 2449, "days_push": 7, "days_rel": 35, "gap_med": 20, "n_releases_24m": 18}
- flags: none
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 7683, forks 1014 (observed 2026-08-28T04:10:02.389585+00:00)

## What it is
go-git is a highly extensible Git implementation written in pure Go, exposing both low-level (plumbing) and high-level (porcelain) operations through an idiomatic Go API. It supports pluggable storage backends such as in-memory filesystems via the Storer interface, enabling Git functionality without shelling out to the git binary.

## Use cases
- clone git repositories from a Go program without installing git
- read commits, trees, and blobs from a git repository programmatically
- build a git server or hosting service in Go
- implement custom git storage backends like in-memory or remote filesystems
- automate git operations in CI/CD or deployment tools
- inspect repository history for analytics or code search tools

## When to choose
- you need to embed Git functionality in a Go application without depending on the git binary
- you need custom or in-memory storage for git objects
- you are building tools like Gitea, Flux, or Pulumi that manipulate repositories programmatically
- you want an idiomatic Go API rather than parsing git CLI output

## When to avoid
- you need full compatibility with every git feature, as go-git implements a subset documented in COMPATIBILITY.md
- you just need to run git commands in scripts where shelling out to git is simpler
- you need maximum performance on very large repositories where the native git binary may be faster

## Facets
- artifact type: library
- maturity: active
- function: version-control, developer-tools, file-system, http-client
- domain: version-control, developer-tools
- platform: go, cross-platform
- tags: git, git-client, git-server, plumbing, porcelain, pure-go, in-memory-storage, command-line

## Member repositories
- go-git/go-git (main) score 98

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:10:02.389585+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-29T17:36:02.195073+00:00, confidence not recorded.
  - readme: https://github.com/go-git/go-git (fetched 2026-08-28T04:10:02.389585+00:00, sha f2a08db2d4cd)
  - homepage: https://pkg.go.dev/github.com/go-git/go-git/v6 (fetched 2026-08-29T08:31:37.969388+00:00, sha 9adfd246589c)
  - site_page: https://pkg.go.dev/about (fetched 2026-08-29T08:31:37.974439+00:00, sha 757852027879)
  - site_page: https://go.dev/about (fetched 2026-08-29T08:31:37.976370+00:00, sha 8b6453863a90)
  - site_page: https://go.dev/project (fetched 2026-08-29T08:31:37.978591+00:00, sha d5ca00bb378b)
- Data as of 2026-08-30T08:39:29.467469+00:00.
