Skip to main content

Jujutsu compared

Jujutsu (jj) can share storage and a working copy with Git in a colocated repository. A splice is ordinary files plus .splice, so jj sees app and library changes together. Submodule contents are not managed by jj, and there is no released folder-sync command (Git compatibility).

This makes jj relevant as a tool to use alongside git-splice. It does not provide an alternative way to sync a folder with another repository.

git-splice stops at the detached HEAD​

jj has bookmarks, but no currently selected branch. Its commands usually leave Git's HEAD detached, while git-splice uses the current Git branch to choose the upstream branch. Sharing .git/ does not resolve that mismatch.

After jj commit, move the intended bookmark to the committed change (@-), select it with Git, and sync:

jj bookmark set main -r @-
git checkout main
git splice push vendor/lib

Use the branch you intend to publish, here main. A later jj new or jj commit can detach Git's HEAD again, so selecting a branch is a workaround for each sync, not native jj integration.

The checked scenario shows both the submodule/splice difference and the branch workaround with the jj version pinned in flake.nix.

Future integration needs to decide which bookmark and commit git-splice should use. That discussion and upstream proposals are under Going forward.