Skip to main content

Discover, track, and sync Git repos across GitHub, GitLab, and Gitea

Project description

git-proj

Discover, track, and sync Git repos across GitHub, GitLab, and Gitea from one CLI.

Why

If you juggle between different projects and work across multiple Git foundries — GitHub, a company GitLab, a self-hosted Gitea — you may lose track of what lives where and what you've been working on recently.

git-proj gives you one place to discover repos via APIs, pick which ones to track, and keep them synced locally.

Install

Requires Python 3.11+ and uv.

uv tool install git-proj

Or from source:

git clone https://github.com/sjev/git-projects.git
cd git-projects
uv sync --frozen

The CLI command is gpr.

Quick start

# Create config with default foundries
gpr config init

# Edit ~/.local/share/git-projects/config.yaml to add your API tokens

# Fetch all repos from configured foundries
gpr remote fetch

# Browse what's available
gpr remote list
gpr remote list myproject    # filter by name

# Track a repo by name (resolved from index) or URL
gpr track my-repo
gpr track git@github.com:user/repo.git

# Clone missing repos, pull & push existing ones
gpr sync

# See what you're tracking
gpr list

# Stop tracking
gpr untrack my-repo

Commands

Command Description
config init Create default config file
config show Show config path and contents
remote fetch [foundry] Fetch repos from foundry APIs, save to local index
remote list [query] [--all] Browse repos from local index (no network)
track <name|url> [--path] Add a project to tracking
untrack <name> Remove a project from tracking
list Show tracked projects
sync Clone missing, pull & push existing tracked repos
info Show version, paths, and counts

Configuration

Config lives at $XDG_DATA_HOME/git-projects/ (typically ~/.local/share/git-projects/):

config.yaml      # foundries, clone_root, credentials — never share this
projects.json    # tracked projects (portable, no secrets)
index.json       # cached repo metadata from last fetch

Example config.yaml:

clone_root: ~/projects
clone_url_format: ssh    # or "https"
foundries:
  - name: github
    type: github
    token: ghp_...
  - name: my-gitea
    type: gitea
    url: https://gitea.example.com
    token: ""

Multi-machine setup

projects.json is portable (relative paths, no secrets). Copy it between machines:

scp ~/.local/share/git-projects/projects.json other-machine:~/.local/share/git-projects/
gpr sync

Development

uv sync --group dev
uv run invoke lint      # ruff check + ruff format --check + mypy
uv run invoke test      # pytest with coverage
uv run invoke format    # ruff format

Versioning

Bump the version with bump-my-version:

uv run invoke bump           # patch: 0.1.0 → 0.1.1
uv run invoke bump --part minor  # minor: 0.1.0 → 0.2.0
uv run invoke bump --part major  # major: 0.1.0 → 1.0.0

Each bump updates pyproject.toml, creates a git commit, and tags the release.

License

MIT

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

git_proj-0.2.0.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

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

git_proj-0.2.0-py3-none-any.whl (16.5 kB view details)

Uploaded Python 3

File details

Details for the file git_proj-0.2.0.tar.gz.

File metadata

  • Download URL: git_proj-0.2.0.tar.gz
  • Upload date:
  • Size: 10.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.11

File hashes

Hashes for git_proj-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1926e91a8540f7b7babd5cfef9dd4c73eddc3772c0f07a9233d9ce1e3b4ce59d
MD5 552067fa611a2b02dd5a9fec82fd9dfd
BLAKE2b-256 633cbfb708df3444fcff542d9b79552000aa864fbb5df37ae9c519aa38a043d9

See more details on using hashes here.

File details

Details for the file git_proj-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: git_proj-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 16.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.11

File hashes

Hashes for git_proj-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e45a17525465e829df69bcb828d42f9b4e23267623996742d205c0d65fcbf3b1
MD5 dd13da76ed64e41c54ce9557d94a01b1
BLAKE2b-256 8472ccfe7ffdc9ab830dbade04797661f903d68cde2d00dd53a785c079eac632

See more details on using hashes here.

Supported by

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