All notable changes to this project are documented in this file. The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
examples/README.md.GitDb.collections() listing the collection names stored under root.Collection.export_excel() and GitDb.export_excel() write
.xlsx workbooks (one sheet per collection) using only the standard library.gitdb.sources (from_sql, from_dbapi, from_mongo,
from_records) reads relational (PEP 249) and non-relational sources, and
Collection.import_records() writes them one commit per chunk.examples/server/): a web UI that signs in to a repository,
lists its collections and queries them.aria-live region.Writer/Transaction twins.Addresses the limitations documented in the README. Everything is backwards-compatible: new behaviour is either a pure improvement or opt-in.
AsyncGitDb, AsyncCollection and AsyncBatch built on httpx.AsyncClient,
mirroring the synchronous surface. Install with pip install "gitdb-py[async]".{root}/_index/{collection}/{field}.json) written in the
same commit as the document, with Collection.find_by(field, value) and
reindex() for drift. Configure with indexes={"users": ["email"]}.{root}/_manifest/{collection}.json) so list() and
count() cost a single request. Configure with manifests=[...].concurrency option: a bounded thread pool (asyncio.gather in the async
client) fanning out the document reads behind all(), find() and count().use_graphql=True, graphql_batch_size), which
collapse N document reads into a handful of requests.Collection.page(), Collection.pages() and after= on
list()/all().db.at(commit_sha), db.snapshot(),
db.on_branch(branch), db.resolve_ref() and the ref/pin_ref options.
Read-only mode now resolves the branch to a commit sha and reads immutable
raw.githubusercontent.com/{repo}/{sha}/{path} urls by default.get(id, fresh=True) to bypass caches and revalidate a read.Batch.expect(collection, id, rev=..., sha=...), verified
against the base tree before any blob is uploaded.batch_retries times instead of failing outright.db.transaction() — stages several commits on a work branch and
fast-forwards the target branch in a single ref update, deleting the work
branch on rollback.db.writer() — coalesces single-document writes into commits every
max_operations operations or max_seconds seconds.Collection.restore(id, commit_sha) and
db.revert(commit_sha) commit forward instead of rewriting history.expected_rev= compare-and-set on update(), replace() and delete().db.compact(confirm=True) — squashes branch history into a single commit
(destructive, opt-in).If-None-Match; GitHub does not charge 304 responses against the quota.Cache, CacheEntry, MemoryCache and NullCache, with
cache= accepting any implementation so shas/ETags can be shared across
processes.pace_requests=True spreads the remaining quota over
the window, db.rate_limit() inspects the budget for free, and
RateLimitError exposes .remaining, .reset and .reset_at.InstallationTokenAuth for GitHub App installation tokens with automatic
refresh, for callers who need quotas above the personal-token limit.contents_max_bytes (default ~900 KB) are written
through the Git Data blob API instead of the Contents API, removing the
effective ~1 MB write cap; reads fall back to fetching the blob by sha when
the Contents response omits an oversized body.Collection.all() reads document bodies from the blob shas already returned
by the tree listing, so listing plus reading no longer needs a Contents call
per document.{ref}:{prefix}) rather
than the whole repository tree, and descends per shard subtree when a tree is
truncated, before falling back to the Contents crawl.paths, documents, derived, cache
and ratelimit modules shared by the sync and async clients.GitDb client with collection(), batch(), history() and invalidate().Collection CRUD: insert, get, exists, update, replace, upsert,
delete, list, all, find, count, history.recursive=1, including truncated
tree handling and a Contents API fallback that walks shard directories.X-RateLimit-Remaining,
X-RateLimit-Reset and Retry-After, with exponential backoff plus jitter._id, _created_at,
_updated_at, _rev).api_url, injectable
session/auth, and read-only mode over raw.githubusercontent.com.GitDbError, NotFoundError, ConflictError,
RateLimitError, AuthError, ValidationError.py.typed, pytest suite with mocked HTTP, ruff and
mypy configuration, GitHub Actions CI on Python 3.9–3.12, README and example.