devcontainers / devcontainers/cli
--mount-git-worktree-common-dir silently ignored when devcontainer.json sets a custom workspaceMount
- Dominant language
- TypeScript
- Stars
- 3k
- Forks
- 457
- Avg merge
- 13h 17m
- Merged PRs (30d)
- 6
Description
### 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:
```js
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.:
```json
{ "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 status` → `fatal: 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.
Contributor guide
Assessment
This issue has not been assessed yet.