Tools and git hooks to make it easier to work with submodules are updated frequently, enable a sort of virtual mono repo.
Project description
smflow
smflow is a lightweight toolset and set of Git hooks designed to make working with Git submodules significantly easier. It helps keep submodules in sync with the parent repository, enabling a "virtual monorepo" workflow — without giving up the benefits of repository modularity.
🚀 Features
- Intuitively work with submodules through VS Code git interface.
- Automatically attaches submodule
HEADs to the commits referenced by the parent repository. - Quickly see how many changes the current submodule is behind the tracked branch.
- Keeps local submodules in sync when switching branches in the parent project.
- Automatically update
.gitmodulesin parent when changing locally checking out branches for submodules. - Configures Git for a smoother submodule experience:
- Auto-checkout submodules on branch change
- Auto-push submodule commits when pushing the parent
📦 Installation
Note: Requires
uvto be installed.
Install smflow with:
uv tool install smflow
🛠️ Usage
From the root of your parent repository (the one that contains submodules), run:
smflow init
This will configure your repository with the appropriate Git settings and install the necessary hooks.
🔍 What smflow init Does
🔗 Git Hooks
The following hooks will be installed: • Post-checkout hook Automatically resets submodules to the correct commit when you checkout a branch in the parent repository. • Post-branch-change hook Updates .gitmodules when you switch between branches, ensuring consistency across the repo.
⚙️ Git Configuration
smflow sets these recommended Git config values:
git config submodule.recurse true
Ensures submodules are automatically checked out when switching branches.
git config push.recurseSubmodules on-demand
Allows pushing submodule commits automatically when pushing the parent repository — if the submodules and parent share the same branch name. If not, Git will warn and suggest pushing submodules first.
⚠️ Limitations
- smflow does not currently support recursive submodules, i.e. submodules within submodules.
🧩 Why smflow?
Managing submodules manually is tedious and error-prone. smflow minimizes the overhead and makes it easier to:
- Stay in sync with your team
- Avoid detached HEAD states in submodules
- Prevent pushing parent branches that reference unpublished submodule commits
Whether you’re working with multiple shared libraries or simply trying to tame Git submodules, smflow provides a smoother, safer workflow.
Project details
Release history Release notifications | RSS feed
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 smflow-0.3.3.tar.gz.
File metadata
- Download URL: smflow-0.3.3.tar.gz
- Upload date:
- Size: 12.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c93d0de9a9d293b941cc825fa33777b454eedcd782128e23dea25b3d70c0b1fb
|
|
| MD5 |
140a1686a8217db5136787b1c9d5df3d
|
|
| BLAKE2b-256 |
ce04a8ba9857ffe15df84df9a82e9eece547f3cc0969065b4d78285f59255206
|
File details
Details for the file smflow-0.3.3-py3-none-any.whl.
File metadata
- Download URL: smflow-0.3.3-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8fe4bbff62d89750ca563c414ab54f5d835acbe9e41037df9eb70f91f952b70
|
|
| MD5 |
a38948a08e522da02f5f8d0dfcad2edf
|
|
| BLAKE2b-256 |
7da79ea2c8b7024be189faa5b499af7fc206f7a535381f7b11d95b0dce3dad79
|