LaoYueHanNi/dsh-git-worktree
Branch switching and isolated git worktrees as real workspaces, from the Web UI composer.
Listed
1
Git
Bundle verified
Preview
What it does
Branch switching and isolated git worktrees as real workspaces, from the Web UI composer.
Best for
- Developers who frequently switch Git branches from the DSH Web composer.
- Parallel development workflows that need isolated branches represented as real DSH workspaces.
- Users who want existing worktrees reused and stale registrations recovered automatically.
Not ideal for
- Non-Git projects or workflows that do not use the DSH Web profile.
- Users who already manage branches and worktrees entirely outside the Web UI and gain little from an in-composer picker.
- Environments that require uninstalling a plugin to also delete worktree directories; retained folders require manual cleanup.
README
dsh-git-worktree

| 简体中文 | English |
A dsh plugin for simple branch & worktree management in the Web UI. The composer tool row shows the current branch: pick another to switch in place, or flip the Worktree toggle to get an isolated worktree as a real workspace — as shown in the screenshot above.
Repo: https://github.com/LaoYueHanNi/dsh-git-worktree
Features
-
IDEA-style branch picker: the branch menu treats
/as a folder hierarchy — collapsible folders, last-segment labels, the checked-out branch’s chain opens by default and is centered on open. Single click selects a row; double-click or Enter opens the right-side confirm flyout. The left tool strip offers locate current branch and expand/collapse all; the bottom search keeps the matching branches’ ancestor folders and highlights the hit substring. Clipped labels expose the full name on hover. -
Branch switching: pick a branch from the chip’s menu and confirm — an in-place
git switch. Inside a linked worktree it switches within that worktree only. -
Worktree isolation: on a blank session, the Worktree toggle turns the pick into
git worktree addunder~/.dsh/gitworktree/<repo>-<branch>/, registered as a real workspace with a fresh blank session. Same branch re-picks reuse the existing worktree; stale registrations recover viagit worktree prune. - Storage root configurable: Settings → Git Worktree — native folder picker, saves automatically.
Install
From GitHub (recommended)
dsh plugin --profile web add github:LaoYueHanNi/dsh-git-worktree
The package declares
dsh.bundle, soaddwires the plugin into the profile’s layer stack automatically — no config editing needed. The builtlib/ships in the repo (there is nopreparescript), so git installs work out of the box without any build allowlist. Requires thewebprofile (dsh web).
From a local directory (development)
dsh plugin --profile web add link:D:/Code/dsh-worktree
link: installs a symlink: rebuild the plugin and restart dsh web to apply changes.
Update
dsh plugin --profile web update dsh-git-worktree
Remove
dsh plugin --profile web remove dsh-git-worktree
The plugin is removed from the profile and stops loading. Worktree folders under ~/.dsh/gitworktree/ and the settings file are kept — delete them manually if you no longer need them.
Development
Build the plugin once:
npm install
npm run build && npm run build:client
npm test # vitest (41 tests)
node scripts/smoke.mjs # real-git smoke over the built lib
No
preparescript — by design. The compiledlib/output is committed to the repo. pnpm ≥ 10 refuses to run build scripts of git-hosted dependencies unless they are allowlisted (ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED), so apreparescript would break the zero-configgithub:install for every user. Shipping prebuilt output instead keepsdsh plugin add github:LaoYueHanNi/dsh-git-worktreeworking out of the box. After changing anything undersrc/, always rebuild and commit the updatedlib/, or installs will get stale output:
npm run build && npm run build:client
git add lib/
Temporary mount — effective for this launch only, no profile changes. Create a cordis.yml next to the repo pointing at the built host half (Windows needs the file:/// form):
- insert:
- id: git-worktree
name: 'file:///D:/Code/dsh-worktree/lib/index.js'
dsh web --patch <plugin-dir>/cordis.yml
This mode only mounts the host half (the four /plugin/git-worktree/* routes keep working); the chip needs the client bundle resolved by package name, so for UI development use the link: install above instead: run npm run build && npm run build:client (or npx tsdown --watch in the plugin directory), restart dsh web, and the browser plugin hot-reloads automatically.
Frequently Asked QuestionsFAQ
Use the verified command dsh plugin --profile default add github:LaoYueHanNi/dsh-git-worktree in a DSH-enabled shell. The command resolves the public package metadata and keeps the plugin attached to the catalog identity shown on this page.
Compatibility follows the bundle and profile status shown above. If a profile is not detected, keep the plugin disabled there and check the repository documentation before enabling it in production.
The GitHub link and activity metadata are the source of truth for releases and maintenance. Revisit this page after a new release to confirm the catalog has observed the latest version.