Yeah, when you had multiple agents working on the same machine, branch isolation was no longer sufficient.
A repository folder can only be on one branch at a time.
A worktree is basically equivalent to a cp -R + git branch, which allows this new workflow to occur.
I loved this particular historical insight as to why `git worktree` was added in 2015:
Before worktrees, kernel devs faced a major inconvenience when switching contexts, e.g., stopping feature work to fix an urgent bug on a release branch.
Running git stash and switching branches alters timestamps on thousands of files.
This forces `make` to perform a full re-compile, which can take up to an hour on large kernels.
Sadly worktrees do some stuff with the git folder that's made one development environment we inherited incompatible. Something about the .git folder not being a fully real .git folder maybe
Hah, I have a prototype of the same idea on my backburner! Excited to see this, though I don't understand some of their design choices. Will need to check out more closely.
I don't understand what docker problem would be solved by multiple git directories but not by multiple work trees?
Regardless of whether the former solves it, I was going to suggest you could use compose or whatever in your 'human' tree, and then tell the AI to use equivalent docker commands without using compose, so it gets anonymous/its own named containers, but you keep the convenience.
I use Conductor's spotlight (and a Pi extension I derived from it) but it's not perfect. Once a migration executes, I'm pretty much bound to it but at least once, I have just backed up the database before switching and then restored that.
I use a skill that basically boils down to 'keep track of ongoing work in a json file, create a new numbered clone for each separate thread of work, delete when done'. Worktrees are too opaque and not entirely isolated for my liking.
I've toyed around with worktrees but haven't found them very useful beyond that. I generally find it much easier to carefully prompt an agent so $TASK1 does not interfere with $TASK2
I tried them a while back and they were more annoying than anything. The only real use-case I have for them is stashing long-running changes that are not ready to be committed... but really probably should be anyways.
I set up multiple work trees in one vscode workspace last year and wrote in the agents.md how to merge branches - but I spend about a third of the time helping agents integrate and merge. I remember wishing the tooling would catch up
I used to create multiple local worktrees and mount the sub directories using Docker. This approach had significant limitations because many paths in the agent and .git files were hard-coded.
i have some fun experiments i'm doing with full virtualization middle ware of all sys calls for agents tools/shell commands/io, still far from daily driver, but allows me to do a very rich overlay / virtual file system tom foolery in place
A repository folder can only be on one branch at a time.
A worktree is basically equivalent to a cp -R + git branch, which allows this new workflow to occur.
I loved this particular historical insight as to why `git worktree` was added in 2015:
Before worktrees, kernel devs faced a major inconvenience when switching contexts, e.g., stopping feature work to fix an urgent bug on a release branch.
Running git stash and switching branches alters timestamps on thousands of files.
This forces `make` to perform a full re-compile, which can take up to an hour on large kernels.