polygit
Manage multiple git repos from a single .pgit config file.
uv tool install polygit
Usage
pgit sync # clone missing repos, fetch all
pgit status # show repos with uncommitted changes
pgit pull # pull all repos, auto-stashing local changes
pgit push # interactively commit and push dirty repos
pgit repos # discover drift between .pgit and the filesystem
Configuration
Create a .pgit file in the root directory that contains your repos:
github:
your-username:
repo-one:
repo-two:
some-org:
their-repo: {remote: "some-org/their-repo"}
gitlab:
your-namespace/group:
private-repo:
another-repo:
pgit discovers this file by walking up from the current directory — so running pgit status anywhere inside your repos root just works.
Remote overrides
If a repo is cloned to a local path that differs from its remote path, use the remote key:
github:
my-local-name:
project: {remote: "upstream-org/project"}
push modes
pgit push # prompt for a message per repo (default)
pgit push --all # one message for all dirty repos
pgit push --wip # auto-commit with "WIP <timestamp>"
repos — drift detection
pgit repos compares what's actually on disk against your .pgit config and reports:
- Remote mismatch — repo is at the right path but the git remote differs (e.g. SSH vs HTTPS)
- Wrong location — remote is tracked in
.pgitbut cloned to a different directory - Untracked — repo on disk not referenced in
.pgitat all - Missing — in
.pgitbut not yet cloned (runpgit sync)
It then offers to update .pgit or rename directories interactively.
Migrating from repos.yaml
If you were using the sync.sh predecessor, rename your repos.yaml to .pgit — the format is identical.
Requirements
- Python 3.8+
- git
Metadata
Release files for polygit 0.3.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| polygit-0.3.3.tar.gz | 26.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| polygit-0.3.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.2 kB
Release files / polygit-0.3.3.tar.gz
| Download URL | polygit-0.3.3.tar.gz |
|---|---|
| Size | 26.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fa8c7aa323c0ed1d4d5ca9eeb42cbfd016b7a2e40b6bd1a7005425c486e81423
|
|
BLAKE2b-256 checksum How to use checksums |
ec1901f43430a86b1d024f51654a54cb2dba3c7e614d7cc5298a485232f8d57b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.24.1","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / polygit-0.3.3-py3-none-any.whl
| Download URL | polygit-0.3.3-py3-none-any.whl |
|---|---|
| Size | 10.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26653fcaf4b2ffe8699b1bf09c050de284947eac31a69e2d65ca8f0087a04f0b
|
|
BLAKE2b-256 checksum How to use checksums |
351c31345ebb446353d7b60c5edf46ff2bc2f092d718c5bad4ddd23ed6acd075
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.24.1","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|