Skip to main content

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 .gitmodules in 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 uv to 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.

Ensures submodules are automatically checked out when switching branches.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smflow-0.3.2.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

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

smflow-0.3.2-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file smflow-0.3.2.tar.gz.

File metadata

  • Download URL: smflow-0.3.2.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.8

File hashes

Hashes for smflow-0.3.2.tar.gz
Algorithm Hash digest
SHA256 fe7c83d0e471f7d91f8db269e8f6a98783f77c4887cc5b13cee706478cf739dc
MD5 c0e0fe5c75fa6f6e0ffdf43fc4359bec
BLAKE2b-256 9e32d36d474c6e0f671f9e520ddd5e9f443701a5b1ea4925f4036c0d75bf15fa

See more details on using hashes here.

File details

Details for the file smflow-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: smflow-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.8

File hashes

Hashes for smflow-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ddc4367d1b0ed7e6cfa82af38340045ce54006e3d0e9f3bf07486e3fb1d7a914
MD5 1ce9286e0e4b213dcf4c3e8d1ca9acd9
BLAKE2b-256 d82f7dda2f68e401496ac9ad7a0e8ba67e8d964c5e939a2a843d56252eae5ebe

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