Currently (as of version 2.11.0) there is no built-in functionality to move an already existing worktree. This is listed as an official bug (see https://git-scm.com/docs/git-worktree#_bugs).
To get around this limitation it is possible to perform manual operations directly in the .git
reference files.
In this example, the main copy of the repo is living at /home/user/project-main
and the secondary worktree is located at /home/user/project-1
and we want to move it to /home/user/project-2
.
Don’t perform any git command in between these steps, otherwise the garbage collector might be triggered and the references to the secondary tree can be lost. Perform these steps from the start until the end without interruption:
.git
file to point to the new location inside the main tree. The file /home/user/project-1/.git
should now contain the following:gitdir: /home/user/project-main/.git/worktrees/project-2
.git
directory of the main project by moving the worktree’s directory that exists in there:$ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
/home/user/project-main/.git/worktrees/project-2/gitdir
to point to the new location. In this example, the file would have the following contents:/home/user/project-2/.git
$ mv /home/user/project-1 /home/user/project-2
If you have done everything correctly, listing the existing worktrees should refer to the new location:
$ git worktree list
/home/user/project-main 23f78ad [master]
/home/user/project-2 78ac3f3 [branch-name]
It should now also be safe to run git worktree prune
.