devcontainers / devcontainers/cli

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

Abierto
#1,243 1 comentario 1 reacción 1 asignado Reclamado por @v-Mathiyarasy Ver en GitHub
Lenguaje dominante
TypeScript
Estrellas
3k
Forks
457
Merge medio
13 h 17 min
PR fusionados (30 d)
6

Descripción

### 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.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.