bashadvanced
Git Submodules — Add, Update, and Pin
Manage repository dependencies with submodules: add, update, pin versions, and handle nested repos.
bashPress ⌘/Ctrl + Shift + C to copy
# Add a submodule
git submodule add https://github.com/org/shared-lib.git libs/shared
# Clone a repo WITH its submodules
git clone --recurse-submodules https://github.com/org/main-project.git
# Initialize submodules after clone (if --recurse was forgotten)
git submodule init
git submodule update
# or combined:
git submodule update --init --recursive
# Update submodule to latest remote commit
cd libs/shared
git checkout main
git pull
cd ../..
git add libs/shared
git commit -m "chore: update shared-lib submodule"
# Update all submodules at once
git submodule update --remote --merge
# Pin submodule to specific tag/commit
cd libs/shared
git checkout v2.1.0
cd ../..
git add libs/shared
git commit -m "chore: pin shared-lib to v2.1.0"
# View submodule status
git submodule status
# Deinit (remove from working tree, keep in .gitmodules)
git submodule deinit libs/shared
# Fully remove a submodule
git submodule deinit libs/shared
git rm libs/shared
rm -rf .git/modules/libs/shared
git commit -m "chore: remove shared-lib submodule"Use Cases
- Sharing code libraries across multiple repos
- Pinning third-party dependencies to specific versions
- Managing monorepo-style project structures
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
bashadvanced
Git Submodule Management
Add, update, and manage Git submodules for including external repositories in your project.
Best for: Including shared libraries across multiple repos
#git#submodules
bashadvanced
Git Subtree Workflow
Use git subtree to include external repositories as subdirectories without submodule complexity.
Best for: Including shared code without submodule complexity
#git#subtree
bashadvanced
Git Sparse Checkout — Clone Only What You Need
Use sparse checkout to clone specific directories from large monorepos without downloading everything.
Best for: Working on a specific package in a monorepo
#git#sparse-checkout
bashintermediate
Git Hooks Pre Commit
Git workflow: git-hooks-pre-commit
Best for: version control
#git#version-control