Skip to content

--mount-git-worktree-common-dir silently ignored when devcontainer.json sets a custom workspaceMount #1243

@AvishayHirsh

Description

@AvishayHirsh

Summary

--mount-git-worktree-common-dir (added in #1127) has no effect when the devcontainer.json defines a custom workspaceMount. The worktree common-dir bind mount is never added, so in-container git fails with fatal: not a git repository for any git worktree whose devcontainer uses a custom workspaceMount.

Root cause

In src/spec-node/utils.ts (getWorkspaceConfiguration, ~L386) the entire worktree detection + common-dir mount block is guarded by:

if (workspace && (!workspaceFolder || !('workspaceMount' in config))) { ... }

When workspaceMount is present, the block is skipped — the .git file is never read, the common dir is never resolved, and no mount is added. (Flagged as a possible oversight by @kapouer in #796, Mar 2026.)

Reproduction (CLI 0.82.0, git 2.52)

  1. git init main && (cd main && git commit --allow-empty -m init && git worktree add --relative-paths ../wt)
  2. Add wt/.devcontainer/devcontainer.json with a custom workspaceMount, e.g.:
    { "image": "mcr.microsoft.com/devcontainers/base:debian",
      "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind",
      "workspaceFolder": "/workspace" }
  3. devcontainer up --workspace-folder wt --mount-git-worktree-common-dir true
  4. devcontainer exec --workspace-folder wt -- git -C /workspace statusfatal: not a git repository: (null)
  5. docker inspect on the container shows only the workspace bind mount; the worktree common dir was not mounted.

Removing workspaceMount makes it work — confirming the guard is the cause.

Expected

The common-dir mount should be computed and added even when a custom workspaceMount is set, by resolving the mount target relative to the configured workspaceMount target / workspaceFolder. This is the common case for monorepos that mount a parent directory and set workspaceFolder to a subpath. Relates to #796.

Workaround

Adding the common dir manually via a mounts entry (binding the main repo's .git to the path the worktree's .git file resolves to inside the container) restores in-container git — matching the maintainer's earlier suggestion in #796.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions