Local git

labdash maps GitLab projects to the clones on your disk, so a merge request row becomes a checked-out branch, a worktree, or an editor window without you retyping a branch name.

local-git
One key turns the selected row into a checked-out branch in the clone you mapped.

Where your clones are

settings.yml
repoPaths:
  platform/*: ~/work/platform/*
  ops/runner: ~/work/infra/runner
  "*": ~/src/*

Globs work on both sides. The first pattern that matches wins, so a specific mapping sits above a catch-all.

Without a mapping, labdash still detects the repository you launched it inside, and it still resolves a git remote to a GitLab project: SSH and HTTPS remotes, self-managed hosts, subfolder installs, and which instance the host belongs to. What it cannot do is check out a merge request from a project you have not told it where to find.

Checkout

C fetches the merge request's source branch and switches to it, in the mapped clone.

✔ platform/ingest → feat/retry-budget (fetched, switched)
A dirty working tree stops the checkout

If the target clone has uncommitted changes, labdash stops and says so:

Cannot check out feat/retry-budget. ~/work/platform/ingest has
uncommitted changes in 3 files. Commit, stash, or use W for a worktree.

Worktrees

W creates a git worktree instead of switching branches:

✔ platform/ingest → ~/work/platform/ingest.worktrees/feat-retry-budget

The worktree sits beside the clone, in a directory named after the branch. Your current branch, your build cache and your running dev server stay where they were.

Opening the code

O opens the mapped clone in $EDITOR. o opens the merge request in your browser.

Every subprocess labdash starts, the editor and the browser opener included, has its stdout and stderr discarded, so nothing they print can corrupt the frame.

Repository scope

Ctrl+G scopes every view to the repository you are standing in, and toggles back out again. Launching labdash inside a clone also starts the browse tree at that repository's group, so you begin where you already are.

Local divergence

When a merge request maps to a clone you have, the preview pane says how far your local branch has fallen behind the source branch. You see that before you start reviewing, rather than after a confusing diff.

Creating a merge request

Ctrl+N opens a merge request from the branch you are standing on. It pushes the branch when it has no upstream, prefills the title from the last commit, and asks for a target branch, a description and reviewers.