'&书信电报;分行>';已在'</其他/地点>';在git工作树中

'&书信电报;分行>';已在'</其他/地点>';在git工作树中,git,git-worktree,Git,Git Worktree,我开始使用git worktrees。这似乎可行,但我在尝试签出克隆的工作树中的分支时遇到以下错误: fatal: '<branch>' is already checked out at '</other/location>' fatal:“”已在“”处签出 我如何在不删除.git/worktrees目录的情况下解决这个问题?git不会让您两次签出同一个分支,因为如果您签出了,然后转到两个工作树中的一个并进行新的提交,那么当您返回到另一个工作树时,您将陷入困境 如果

我开始使用git worktrees。这似乎可行,但我在尝试签出克隆的工作树中的分支时遇到以下错误:

fatal: '<branch>' is already checked out at '</other/location>'
fatal:“”已在“”处签出

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

git不会让您两次签出同一个分支,因为如果您签出了,然后转到两个工作树中的一个并进行新的提交,那么当您返回到另一个工作树时,您将陷入困境


如果您确实删除了另一个工作树,只需运行
git-worktree-prune
就可以让git实现这一点。如果您没有实际删除另一个工作树,请不要再签出两次:这一点都不好玩。

只需转到所需分支的
worktree
目录,它就会自动为您签出
checkout

在我的例子中,我有两个长期运行的
工作树
,这意味着在
主节点
旁边有两个相关的分支

$git branch
master  # base stuff here
version-silver # some normal features
version-gold # some better features
有一个存储库,但我有3个单独的文件夹,每个文件夹旁边的每个分支上面。并在
master
中进行常见更改。然后将其与其他两个版本合并

每个版本的具体更改也将放在相应的文件夹中,每个项目上的工作都是独立的,IDE不会混淆

希望有帮助

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

由于“
Git-worktree
”学习了“
move
”和“
remove
”子命令,使用Git 2.17+(2018年第2季度)会更轻松

参见。
参见,、、(2018年2月12日)和(2018年1月24日)的作者。
(于2018年3月14日合并)

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

工作树移动
:新建命令 此命令允许重新定位链接的工作树。
无法(尚未)移动主工作树

以及:

工作树移动
:拒绝移动带有子模块的工作树 子模块包含具有相对路径的
.git
文件。
工作树移动后
,这些文件需要更新,否则它们可能指向任何地方

这是一块绷带,以确保“
工作树移动
”不会断裂 人们的工作树是偶然发生的。
.git
文件更新代码就位时,可以删除此
验证子模块()


注意:在Git 2.21(2019年第1季度)之前,“Git worktree remove
”和“
Git worktree move
”在涉及子模块时拒绝工作。

.

请注意,如果您的
$pwd
中有链接,也会发生这种情况<在检查之前,code>git可能应该
readlink-f
$pwd


编辑:或者这确实可能是因为我没有调用
git-worktree-prune
。现在它开始工作了。

因为您不能在worktree和原始存储库中签出两次。在签出工作树之前,将原始回购签出到其他地方如何

git -C </other/location> checkout <branch>~1
git -C <worktree> checkout <branch>
git-C签出~1
git-C校验
如果您确实需要,您可以通过直接修改相应头文件中的ref,或使用相同名称重新创建分支(例如,
git checkout-B master origin/master)绕过此检查

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

如果在手动
git checkout(1)中搜索“工作树”,您将

git签出--忽略其他工作树

我想我了解风险。我在另一棵树上运行一台流浪机器,所以我不想弄乱那里的树枝。在对克隆的工作树上的自述文件进行一些更改后,我想将更改合并到上游,这意味着我想从主repo中签出分支并推送,然后在第一个位置执行拉入操作。我仍然会说“不要这样做”。您可以在没有风险的情况下获得相同的效果:检查指向与现有工作树相同提交的新分支。在新分支上进行新提交,并以旧名称将新分支推送到上游服务器:
git push:
。现在,您可以
git fetch&&git merge--ff only
(或任何类似或等效的东西)拾取其他工作树中的更改。然后
git worktree move
可能会引起兴趣(使用git 2.17+,2018年第2季度):请参阅。或者在其他位置分离头部,而不更改其工作树
git-C checkout-d
。这样做的好处是,在您使用
再次签出分支后,可以保持其他位置的索引完好无损——忽略其他工作树并提交它。
git checkout --ignore-other-worktrees <branch>