Archived
-
v0.6.0 Pre-Release
released this
2026-10-22 10:44:43 +00:00 | 17 commits to main since this releaseSixth release of submarine. Still a prototype, but the first one that changes your repositories:
xrestores a submodule, or the whole project, to exactly what git records. It also adds a problems-only view and no longer fetches on startup.Highlights
- Restore (
x). Makes the selected submodule, and every submodule below it, exactly what git records: tracked files reset, untracked files and leftover repositories removed, merges and rebases ended, missing submodules cloned or initialized again (also inactive ones and ones set toupdate = none). With the header selected it restores the superproject itself, so one key gives you the exact project your root commit specifies. - Restore never moves a branch: a checkout that is off its pin is detached first, so commits stay on their branch. Ignored files (
.env,node_modules, build output) are kept. - Restore asks only if work would be lost: changed or untracked files, a merge/rebase in progress, commits that no branch or remote reaches, or a repository that exists nowhere else. The question lists what is discarded;
yrestores, any other key cancels. Without a loss it just runs. - Staged pins are kept at every depth. A nested submodule with a staged pin and uncommitted changes keeps the pin and is reset to it. On a submodule with a staged pin,
xasks whether to restore to the staged pin (s) or the committed pin (c, which unstages it). - Problems only (
!). Shows only submodules with an issue (or an unknown state), plus their ancestors, expanded. It combines with the filter and saysproblems onlyabove the footer, so a short list is not mistaken for a healthy repository. - The superproject is selectable. The header is its row: it is selected on startup, shows its own state (
changed,unpushed, …) and has a detail pane like a submodule. A leftover clone of a submodule the branch no longer has shows up as an untracked repository. - No fetch on startup. With hundreds of submodules the automatic fetch was too much. The header and the detail pane show when you last fetched (also fetches made in other shells);
ffetches everything.
Changes to be aware of
- The
--no-fetchflag is removed, since nothing is fetched on startup. Scripts that pass it now fail with "flag provided but not defined". The update check is still off for dev builds,--mockandSUBMARINE_NO_UPDATE_CHECK=1. - Restore is the first action that uses the network besides
f: it may clone a missing submodule or fetch a missing commit. It never prompts (passwords, passphrases and host-key questions fail with git's message instead). - The placeholder keys
u(checkout pin) andb(bump pin) are removed.
Install
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | shInstalls
submarineand the aliassub(linux/macOS, amd64/arm64) to~/.local/bin. Update from 0.5.0 withsubmarine update.Binaries and
checksums.txtare published in the package registry (generic packagesubmarine, versionv0.6.0).Known limitations
- Restore shows
restoring …with a spinner, but no progress per repository, so a restore with many clones takes a while without feedback. - There is no way yet to stage a pin from submarine (planned, see
docs/actions.md). - Restore is not available on the mock data (
--mock).
Downloads
- Restore (