devcontainers / devcontainers/cli

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

Đang mở
#1,243 1 bình luận 1 reaction 1 người được giao Được @v-Mathiyarasy nhận Xem trên GitHub
Ngôn ngữ chính
TypeScript
Star
3k
Fork
457
Merge trung bình
13 giờ 17 phút
Pull request đã merge (30 ngày)
6

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.