Skip to main content

git-maintainer-tools 🧰

GitHub Sponsors Patreon Buy Me a Coffee PayPal

Small CLIs for a fork-based OSS maintainer workflow.

Homepage: github.com/kevinveenbirkenbach/git-maintainer-tools

Originally extracted from s.infinito.nexus/code, where these helpers started as shell scripts under scripts/git/ before being rewritten in Python and split out as a standalone tool.

Tools 🔧

git-setup-remotes 🌐

Configures a clone for a fork-based workflow and is idempotent.

  • origin points at the canonical repository.
  • fork points at the maintainer's personal fork.
  • main tracks origin/main.
  • remote.pushDefault = fork, push.default = current so every git push and every git push -u for a new branch lands on the fork, not on the canonical repo.
  • branch.main.pushRemote = origin so a direct push on the canonical branch targets upstream, not the personal fork (whose branch-protection rules can diverge).

Usage:

git-setup-remotes \
  --canonical git@github.com:<org>/<repo>.git \
  --fork git@github.com:<user>/<fork>.git

Both URLs may be provided via environment variables instead (CANONICAL_URL, FORK_URL). If --fork / FORK_URL is not given, the tool reuses an existing fork remote or an existing origin that does not point at canonical (clone-from-fork case).

git-sign-push 🔐

GPG-signs every unpushed commit on the current branch and pushes.

  • Refuses to run inside the Claude sandbox (where ~/.gnupg is unreadable) and when the working tree is dirty.
  • For a branch with an upstream: git push --force-with-lease after any required re-sign.
  • For a branch without upstream: git push -u <remote> where <remote> is resolved from remote.pushDefault (fallback: origin). In a repo configured by git-setup-remotes, this means new branches land on the fork.

Usage:

git-sign-push

Install 📦

From the repo checkout:

pip install .

Or for development:

pip install -e '.[dev]'

Both entry points are registered in pyproject.toml and will be on your $PATH after install.

Publish 🚀

Build sdist + wheel into dist/ and upload to PyPI:

make publish

make publish pulls in the publish extras (build, twine, keyring) automatically. Auth resolves in the following order:

  1. System keyring (recommended) via the keyring package. Store the token once and every subsequent make publish runs without a prompt:
    keyring set https://upload.pypi.org/legacy/ __token__   # enter pypi-AgEI... when prompted
    
  2. ~/.pypirc or the TWINE_USERNAME / TWINE_PASSWORD environment variables (use __token__ as the username and the PyPI API token as the password).

make publish-test targets TestPyPI instead; register its token under https://test.pypi.org/legacy/ in the keyring.

Sandbox 🏜️

Both CLIs refuse to run when CLAUDE_CODE or CLAUDECODE is set in the environment, because the Claude sandbox blocks .git/config writes (for git-setup-remotes) and access to ~/.gnupg (for git-sign-push). The tools MUST be run by the human operator outside the sandbox.

Author ✍️

Kevin Veen-Birkenbach, veen.world

License 📜

Licensed under the MIT License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

git_maintainer_tools-1.1.1.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

git_maintainer_tools-1.1.1-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file git_maintainer_tools-1.1.1.tar.gz.

File metadata

  • Download URL: git_maintainer_tools-1.1.1.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for git_maintainer_tools-1.1.1.tar.gz
Algorithm Hash digest
SHA256 2abebd08133a9c17a274ca9034e34c4c80ad016a72cde788b8e01762b47142e3
MD5 122828b11a22368270cb117462b67719
BLAKE2b-256 5624e69f7ce1fa27c6a048fb6cb630d2331249d9ac2a81eb66a57d76161b5723

See more details on using hashes here.

File details

Details for the file git_maintainer_tools-1.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for git_maintainer_tools-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0146cd1e53ff2bfe67b029baf109024c81be07165e8f74234358b870bd0a1f26
MD5 03a86a533408b1d5d83fb42cfe6a870b
BLAKE2b-256 18879535ce6cb4b0b4a76f92e499ae3efd2286772489fc8439618151c0feb27e

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page