我开始使用 git worktrees。它似乎可以工作,但是在尝试签出克隆工作树中的分支时出现此错误:
fatal: '<branch>' is already checked out at '</other/location>'
如何在不删除.git/worktrees
目录的情况下解决这个问题?
我开始使用 git worktrees。它似乎可以工作,但是在尝试签出克隆工作树中的分支时出现此错误:
fatal: '<branch>' is already checked out at '</other/location>'
如何在不删除.git/worktrees
目录的情况下解决这个问题?
Git 不会让你检查同一个分支两次,因为如果你这样做了,然后转到两个工作树中的一个并进行新的提交,当你回到另一个时,你会让自己陷入痛苦工作树。
如果您实际上已经删除了另一个工作树,只需运行git worktree prune
以使 Git 意识到这一点。如果您实际上还没有删除其他工作树,请不要检查两次:这不好玩。
如果您在手册中搜索“工作树”,git-checkout(1)
您会发现
git checkout --ignore-other-worktrees <branch>
但是您可能只想执行以下操作,因此当您移动(提交)一个工作树中的分支时,不会移动另一个工作树的 HEAD。
git checkout --detach <branch>
如何在不删除 .git/worktrees 目录的情况下解决这个问题?
使用 Git 2.17+(2018 年第二季度)你会更轻松,因为 " git worktree
" 已经学习了 ' move
' 和 ' remove
' 子命令。
请参阅Eric Sunshine ( ) 的提交 7f19def(2018 年 3 月 4 日)。
请参阅Nguyễn Thai Ngọc Duy ( )的提交 ee6763a、提交 cc73385、提交 78d986b、提交 c64a8d2、提交 9f792bb、提交 9c620fc(2018 年 2 月 12 日)和提交 4ddddc1(2018 年 1 月 24 日) 。(由Junio C Hamano 合并 -- --在提交 bd0f794中,2018 年 3 月 14 日)sunshineco
pclouds
gitster
在您的情况下,您可以将现有工作树移动到您现在想要的位置(尝试为同一分支创建新工作树时)。
worktree move
: 新命令此命令允许重新定位链接的工作树。
主工作树(还)不能移动。
和:
worktree move
: 拒绝移动带有子模块的工作树子模块包含
.git
具有相对路径的文件。
在 a 之后worktree move
,这些文件需要更新,否则它们可能会指向任何地方。这是一个绷带补丁,以确保“
worktree move
”不会意外破坏人们的工作树。
当.git
文件更新代码到位时,validate_no_submodules()
可以将其删除。
注意:在 Git 2.21(2019 年第一季度)之前,当涉及到子模块时,“ git worktree remove
”和“ git worktree move
”会拒绝工作。
这已被放松以忽略未初始化的子模块。
由于您不能在工作树和原始存储库中签出两次。在结帐工作树之前将原始回购结帐到其他地方怎么样?
git -C </other/location> checkout <branch>~1
git -C <worktree> checkout <branch>
如果你真的想要你可以绕过这个检查,或者通过直接修改相应 HEAD 文件中的 ref,或者通过重新创建具有相同名称的分支,例如git checkout -B master origin/master
正如其他人所说,您需要知道自己在做什么;分支对所有工作树都是通用的,更改一个工作树中的一个将立即影响另一个工作树的状态。
只需转到worktree
所需分支的目录,它就会自动checkout
为您服务。
就我而言,我有两个长期运行的worktree
,这意味着master
.
$git branch
master # base stuff here
version-silver # some normal features
version-gold # some better features
有一个存储库,但对于上面的每个分支,我有 3 个单独的文件夹并排放置。并在master
. 然后将其与其他两个版本合并。
每个版本的具体改动也会放在对应的文件夹中,每个项目的作品都是独立的,不会混淆IDE。
希望有帮助。
请注意,如果您的链接中有链接,也会发生这种情况$pwd
。git
应该大概readlink -f
在$pwd
之前检查。
编辑:或者这可能确实是因为我错过了电话git worktree prune
。现在它正在工作。