移动工作树

目前(从版本 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 命令,否则可能会触发垃圾收集器并且可能会丢失对辅助树的引用。从开始到结束执行这些步骤而不中断:

  1. 更改 worktree 的 .git 文件以指向主树内的新位置。文件/home/user/project-1/.git 现在应该包含以下内容:

    gitdir: /home/user/project-main/.git/worktrees/project-2
    
  2. 通过移动存在于其中的 worktree 目录,重命名主项目的 .git 目录中的工作树:

    $ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
    
  3. /home/user/project-main/.git/worktrees/project-2/gitdir 内的参考更改为指向新位置。在此示例中,该文件将具有以下内容:

    /home/user/project-2/.git
    
  4. 最后,将你的工作树移动到新位置:

    $ 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 也应该是安全的。