#8052·jj

Tracking issue for colocated workspaces

Author: ejpcmacCreated Nov 17, 2025Updated Sep 17, 2026
Labelsenhancement🏗️workspaces

This is a tracking issue for the Colocated Workspaces feature.

Background and summary

Please see https://github.com/jj-vcs/jj/issues/4436.

Steps

  • ○ (1) Finalise and merge https://github.com/jj-vcs/jj/pull/8252 [ ONGOING ]
    • ○ Rebase https://github.com/jj-vcs/jj/pull/4644 and create a new PR [ DONE ]
    • ○ List the corner cases in workspace detection and specify the expected behaviour [ TODO ]
    • ○ Fix the review comments and any other issue [ TODO ]
    • ○ Merge to main [ TODO ]
  • ○ (2) List the corner cases in the commands interacting with workspaces and specify their behaviour [ TODO ]
  • ○ (3) Refuse to create a new Jujutsu repo in a Git worktree when running jj git init --colocate [ TODO ]
    • ○ TODO: Check that it is still the case
  • ○ (4) Add workspace support to jj git colocate enable and jj git colocate disable [ TODO ]
  • ○ (5) Add add colocation support to jj workspace subcommands [ TODO ] See: https://github.com/jj-vcs/jj/pull/4588
  • ○ (6) Add support for multiple Git heads to avoid re-importing when switching workspaces [ TODO ] See: https://github.com/jj-vcs/jj/pull/4588

Side quests

  • @ Write a stopgap CLI command (not to be merged) to enable creating colocated workspaces for real-world test purpose

Notes

Step (1) will bring internal support for colocated workspaces, but the MVP must include steps (3) and (4) to be usable.

Step (6) will solve an inconsistency and annoyance with the git_head(). To quote myself:

After my first experiments, I’m seeing three things I’d like to fix:

  1. when a workspace is not colocated, jj log still shows the git_head() from the @default workspace, which is IMO misleading. git_head() is properly updated once the workspace is colocated;
  2. when switching back and forth between workspaces, Jujutsu seems to reimport the state from Git, which creates a lot of duplicate changes;
  3. this one is certainly related to (1) and (2): if we create a new non-colocated workspace, git_head() points to the Git HEAD from the latest visited colocated worktree, which does not give a consistent result.

Note to maintainers: if such a tracking issue does not seem appropriate to you, please close it.