在一般的版本控制系统中(不仅仅是 Git),总是必须有一个工作的地方。这个地方使用的名称各不相同:工作树、工作树、工作目录等。总的来说,工作树或工作树或某些变体可能是最好的,因为“工作目录”似乎暗示了单一级别的“目录性” ”。
Git 的名称总是有点不一致,但使用“工作树”或“工作树”的举动相当稳定。git worktree
从历史上看,当子命令在 Git 2.5 版中正式进入 Git时,这一点变得更加重要。
所以,具体来说:
[短语]工作目录[在文档git stash
中]只是一个等待修复的过时错误吗?
我会这么说,是的。
上面的状态变化是为了解决混淆并表示状态是唯一的每个工作树,因为它的 HEAD?
是的。但是请注意,它git status
基于三个项目动态计算状态:(每个工作树HEAD
有一个HEAD
)、索引(每个工作树有一个索引)和工作树。
(令人困惑的是,任何命令都可以建立自己的临时索引并使用它。每个工作树的一个索引是该工作树的一个“真实”索引,除了由某个命令临时创建并设置为的任何临时索引$GIT_INDEX_FILE
。)
如果是这种情况,那么 gc 每个工作树也是唯一的,还是在 fsck 之类的“数据库”上完成?
git gc
在数据库上工作。但是,因为它删除了未引用的对象,所以这是一个特别复杂的情况:它必须查看每个索引和每个(可能是分离的)HEAD
,这意味着它必须遍历所有工作树。
与 stash 相同的想法,stash 是否关心它被称为什么工作树?
git stash
所做的是进行两次,有时甚至是三次提交。它从索引和工作树中生成它们,因此您在哪个工作树中确实很重要。(第三次提交,如果存在,则包含未跟踪的文件:未跟踪但未忽略,或未跟踪-包括-忽略。这些也来自当前的工作树。)
提交本身没有分支。相反,默认情况下,其中一个提交(定位其他提交的那个)存储在 中refs/stash
,使用其 reflog 保留任何先前的refs/stash
值。