移动工作树
目前(从版本 2.11.0 开始),没有内置函数来移动现有的工作树。这被列为官方错误(请参阅 https://git-scm.com/docs/git-worktree#_bugs) 。
为了解决这个限制,可以直接在 .git
参考文件中执行手动操作。
在这个例子中,回购的主要副本住在/home/user/project-main
和次级 worktree 位于/home/user/project-1
,我们希望将它移动到/home/user/project-2
。
不要在这些步骤之间执行任何 git 命令,否则可能会触发垃圾收集器并且可能会丢失对辅助树的引用。从开始到结束执行这些步骤而不中断:
-
更改 worktree 的
.git
文件以指向主树内的新位置。文件/home/user/project-1/.git
现在应该包含以下内容:gitdir: /home/user/project-main/.git/worktrees/project-2
-
通过移动存在于其中的 worktree 目录,重命名主项目的
.git
目录中的工作树:$ 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
内的参考更改为指向新位置。在此示例中,该文件将具有以下内容:/home/user/project-2/.git
-
最后,将你的工作树移动到新位置:
$ mv /home/user/project-1 /home/user/project-2
如果你已正确完成所有操作,列出现有工作树应参考新位置:
$ git worktree list
/home/user/project-main 23f78ad [master]
/home/user/project-2 78ac3f3 [branch-name]
现在运行 git worktree prune
也应该是安全的。