Skip to main content

Sync filtered commits from private to public repository

Project description

git-sync-filtered

GitHub Repo stars Python versions License

A thin wrapper around git-filter-repo for syncing filtered commits from a private repository to a public repository.

Overview

git-sync-filtered clones a private repository, filters it to only include specified paths using git-filter-repo, and pushes the result to a public repository's sync branch. This enables maintaining a public subset of a private repository while preserving commit history.

Installation

uv (recommended)

uv tool install git-sync-filtered

pip

pip install git-sync-filtered

uvx (run without installing)

uvx git-sync-filtered \
  --private git@github.com:org/private.git \
  --public git@github.com:org/public.git \
  --keep src \
  --keep docs

Usage

git-sync-filtered \
  --private git@github.com:org/private.git \
  --public git@github.com:org/public.git \
  --keep src \
  --keep docs

Using a paths file

Create a file with paths to keep (one per line, lines starting with # are comments):

src
docs
README.md
git-sync-filtered \
  --private git@github.com:org/private.git \
  --public git@github.com:org/public.git \
  --keep-from-file paths.txt

Options

Option Description Default
--private Private repo path or URL Required
--public Public repo path or URL Required
--keep Paths to keep (specify multiple) Required
--keep-from-file File containing paths to keep -
--sync-branch Sync branch name upstream/sync
--main-branch Main branch name main
--private-branch Private branch to sync from main
--dry-run Show what would happen without making changes false
--merge Merge into main branch after sync false
--force Force push false

How It Works

  1. Clones the private repository
  2. Runs git-filter-repo to filter to only the specified paths
  3. Pushes filtered commits to the public repository's sync branch
  4. Optionally merges the sync branch into main

The sync branch can then be merged into main manually or with --merge.

Workflow

flowchart LR
    A[Private Repo<br/>private-branch] -->|clone & filter| B[git-sync-filtered]
    B -->|push| C[Public Repo<br/>sync-branch]
    C -->|"merge<br/>(manual or with --merge)"| D[Public Repo<br/>main-branch]

Requirements

  • Python 3.10+
  • git >= 2.36.0

Sponsored by Merge 42

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_sync_filtered-0.1.3.tar.gz (5.4 kB view details)

Uploaded Source

Built Distribution

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

git_sync_filtered-0.1.3-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file git_sync_filtered-0.1.3.tar.gz.

File metadata

  • Download URL: git_sync_filtered-0.1.3.tar.gz
  • Upload date:
  • Size: 5.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for git_sync_filtered-0.1.3.tar.gz
Algorithm Hash digest
SHA256 014a2967a919b328be8d3bd9a608efa03cc356d10662aa62f6bab2298bea9a1d
MD5 9149592466ad40689c14f34d8f6577e6
BLAKE2b-256 10229a52ddc7c2e929e72be4eda303d335b7cbee9b2204a49122b1235f98bf83

See more details on using hashes here.

File details

Details for the file git_sync_filtered-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: git_sync_filtered-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for git_sync_filtered-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6b51852f6b81f5580855c73b9397ba0a793ec50e00742020427bdd6ba1c57bdf
MD5 957ef37948f4395191e53f52c7f198cd
BLAKE2b-256 80a06ea4934590b80dbb939ade732ec7936df730b7a4baf917413df9049ba2ad

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