A CLI tool to synchronize projects with their templates.
Project description
sync-template
sync-template is a CLI tool designed for managing and synchronizing projects derived from template repositories. It helps you seamlessly merge updates from the template project into your existing project while protecting your local modifications using .syncignore.
Core Features
- Rapid Initialization: Quickly create new projects from a template repository using
git clone --depth 1. - Auto-configuration: Automatically sets the template repository as a remote named
template. - Shortcut Support: Use
gh:<owner>/<repo>for GitHub orglab:<owner>/<repo>for GitLab shortcuts. - Smart Synchronization: Fetches and merges updates from the template repository via
git fetchandgit merge. - .syncignore Protection: Automatically applies ignore rules after merging to ensure specific files or directories remain in their local state (supports recursive directories).
- Safety Checks: Automatically verifies the working tree for uncommitted or untracked files before syncing to prevent accidental data loss.
Installation
Ensure your system has Python 3.13+ and Git installed.
To install via pip (after publishing):
pip install sync-template
To install from source (using Poetry):
git clone https://github.com/your-username/sync-template.git
cd sync-template
poetry install
Usage
1. Initialize a New Project
Create a new project from a Git template repository:
sync-template init gh:user/my-python-template my-new-project
Or initialize within an existing repository by adding only the template remote:
cd my-existing-repo
sync-template init gh:user/my-python-template --existing
The init command supports:
- Full HTTPS URLs:
https://github.com/user/repo.git - SSH URLs:
git@github.com:user/repo.git - GitHub shortcuts:
gh:user/repo - GitLab shortcuts:
glab:user/repo
2. Configure Ignore Rules
Create a .syncignore file in the project root. The syntax is identical to .gitignore.
Example:
# Ignore configuration files
config.json
# Ignore the entire content directory (including additions, modifications, and deletions)
content/
# Ignore specific local-only scripts
scripts/local_only.sh
3. Sync Updates
When the template repository has updates, run the following in your project root:
sync-template sync
By default, it syncs the main branch. To sync a different branch, use the --branch parameter:
sync-template sync --branch develop
How It Works
- Workflow Check: Ensures there are no uncommitted or untracked changes in the current branch.
- Fetch Updates: Executes
git fetch template. - Merge Attempt: Executes
git merge --no-commit template/<branch>. - Apply Ignore Logic:
- Traverses all paths matched by
.syncignore. - If a path existed before the sync, it uses
git checkout HEADto restore its content and automatically resolve conflicts. - If a path was added by the template, it physically removes the file and clears it from the Git index.
- Automatic Cleanup: Recursively cleans up empty directories left behind by the removal process.
- Traverses all paths matched by
- Finalization: Prompts the user to review the merge result and commit.
Development & Contribution
This project uses Poetry for dependency management.
- Run Tests:
poetry run pytest - Linting Check:
poetry run ruff check . - Format Code:
poetry run ruff format .
License
This project is licensed under the MIT License.
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 sync_template-0.2.3.tar.gz.
File metadata
- Download URL: sync_template-0.2.3.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fb19534a09bfa8db9873c12e91a47faad3b0941ebd7fd80ff7b601e5d17bc60
|
|
| MD5 |
8c8bd763384af751a53a181bed08e043
|
|
| BLAKE2b-256 |
00e4072185ed2e74651de589df6f0fa7acd0e0d2bee5505bed9dcaf71425a6fe
|
Provenance
The following attestation bundles were made for sync_template-0.2.3.tar.gz:
Publisher:
publish.yml on XXCC-Unicorn-Press/sync-template
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sync_template-0.2.3.tar.gz -
Subject digest:
3fb19534a09bfa8db9873c12e91a47faad3b0941ebd7fd80ff7b601e5d17bc60 - Sigstore transparency entry: 1264357082
- Sigstore integration time:
-
Permalink:
XXCC-Unicorn-Press/sync-template@15182ed2b2fa0a21a834a397866f0c5efa2cfad9 -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/XXCC-Unicorn-Press
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@15182ed2b2fa0a21a834a397866f0c5efa2cfad9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sync_template-0.2.3-py3-none-any.whl.
File metadata
- Download URL: sync_template-0.2.3-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6377aff2525c6899179ac37b52897c0dfefbf9d52a4b2f232a0e8710e7b7351
|
|
| MD5 |
db7541b574aa180be080a81892e98472
|
|
| BLAKE2b-256 |
3bdac2a317a4f61d695c8c6353027b968ce660f7cde6ae5e8dbcfa85539cd419
|
Provenance
The following attestation bundles were made for sync_template-0.2.3-py3-none-any.whl:
Publisher:
publish.yml on XXCC-Unicorn-Press/sync-template
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sync_template-0.2.3-py3-none-any.whl -
Subject digest:
d6377aff2525c6899179ac37b52897c0dfefbf9d52a4b2f232a0e8710e7b7351 - Sigstore transparency entry: 1264357212
- Sigstore integration time:
-
Permalink:
XXCC-Unicorn-Press/sync-template@15182ed2b2fa0a21a834a397866f0c5efa2cfad9 -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/XXCC-Unicorn-Press
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@15182ed2b2fa0a21a834a397866f0c5efa2cfad9 -
Trigger Event:
push
-
Statement type: