Manage multiple git repos from a single .pgit config file.
Project description
polygit
Manage multiple git repos from a single .pgit config file.
pip 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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file polygit-0.1.0.tar.gz.
File metadata
- Download URL: polygit-0.1.0.tar.gz
- Upload date:
- Size: 24.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c187d2f28bf6f2111db7660789300f736376456b9088753bae6009cc99d9a277
|
|
| MD5 |
b61b6b60cb3da156370c3923486b2bd7
|
|
| BLAKE2b-256 |
b26a3ff099625f7dd42237198a026e64ca9dede13819a9b05bbc1f9eb3b2d70b
|
File details
Details for the file polygit-0.1.0-py3-none-any.whl.
File metadata
- Download URL: polygit-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d05ae09008c1aa7ebde35734145c00acff9e3298e7a31786156f59ac9089255a
|
|
| MD5 |
e194051723257316bdb12ad41b07ff08
|
|
| BLAKE2b-256 |
9aa92545e3a85ed99d7b74cf389054933e5b357ce2efb1bd39a09dcc08cc4137
|