&#39; <分支>&#39;已经在&#39;&#39;在git worktrees中

时间:2017-01-09 09:59:14

标签: git git-worktree

我开始使用git worktrees。它似乎有效,但我在尝试检出克隆工作树中的分支时遇到此错误:

fatal: '<branch>' is already checked out at '</other/location>'

如何在不删除.git/worktrees目录的情况下解决此问题?

7 个答案:

答案 0 :(得分:18)

Git不会让你两次检查同一个分支,因为如果你这样做,然后去两个工作树中的一个并做一个新的提交,当你回去时,你会为自己的痛苦做好准备到其他工作树。

如果您实际上已删除了其他工作树,只需运行git worktree prune即可让Git意识到这一点。如果实际删除了其他工作树,请不要检查两次:这没什么好玩的。

答案 1 :(得分:2)

  

如何在不删除.git / worktrees目录的情况下解决这个问题?

使用Git 2.17 +(2018年第二季度)可以更轻松,因为“git worktree”已经学习了“move”和“remove”子命令。

commit 7f19defEric Sunshine (sunshineco)(2018年3月4日) 请参阅commit ee6763acommit cc73385commit 78d986bcommit c64a8d2commit 9f792bbcommit 9c620fc(2018年2月12日)和commit 4ddddc1(24 2018年1月)Nguyễn Thái Ngọc Duy (pclouds) (由Junio C Hamano -- gitster --合并于commit bd0f794,2018年3月14日)

在您的情况下,您可以现有的工作树移动到您现在想要的位置(尝试为同一分支创建新的工作树时)。

  

worktree move:新命令

     

此命令允许重新定位链接的工作树   主要的工作树不能(还)被移动。

  

worktree move:拒绝移动子模块

的工作树      

子模块包含具有相对路径的.git个文件   在worktree move之后,这些文件需要更新,或者它们可能无处可寻。

     

这是一个绷带补丁,以确保“worktree move”不会破坏   人们的意外工作。
  当.git文件更新代码到位时,可以删除此validate_no_submodules()

注意:在Git 2.21(2019年第一季度)之前,当涉及子模块时,“git worktree remove”和“git worktree move”拒绝工作。
This has been loosened to ignore uninitialized submodules

答案 2 :(得分:1)

因为您不能在工作树和原始存储库中两次签出。在结帐工作树之前,将原始仓库结帐到其他地方怎么样?

git -C </other/location> checkout <branch>~1
git -C <worktree> checkout <branch>

答案 3 :(得分:1)

如果您在手册中搜索“worktree”git-checkout(1),您将find

git checkout --ignore-other-worktrees <branch>

答案 4 :(得分:0)

只需转到所需分支的worktree目录,然后自动为checkout

在我的情况下,我有两个长期运行的worktree,这意味着master旁边有两个相关的分支。

$git branch
master  # base stuff here
version-silver # some normal features
version-gold # some better features

有一个存储库,但我上面的每个分支都有3个单独的文件夹。并在master中进行常见更改。然后将其与其他两个版本合并。

每个版本的具体更改也将放在相应的文件夹中,并且每个项目的工作都是隔离的,IDE也不会混淆。

希望有所帮助。

答案 5 :(得分:0)

请注意,如果您的$pwd中包含链接,也会发生这种情况。检查之前,git应该在readlink -f$pwd

编辑:或者这确实可能是因为我错过了打git worktree prune的电话。现在可以了。

答案 6 :(得分:0)

如果您真的想,则可以通过直接修改相应HEAD文件中的ref或通过重新创建具有相同名称的分支(例如)来绕过此检查。 git checkout -B master origin/master

正如其他人所说,您需要知道自己在做什么;分支对于所有工作树都是通用的,更改一个工作树将立即影响另一个工作树的状态。