工作目录和工作树不一致

Inconsistency between working directory and working tree

我已经阅读 git 文档一段时间了,并且开始意识到在很多命令中,当涉及到 "working directory" 和 [=20] 之间的区别时,文档是模棱两可的=].我知道状态 here 的变化,并且更频繁使用的命令(如添加)也保持一致。但是我昨天对文档进行了一次 grep 拉取,显示很多命令仍然没有相应更新。

这引出了我的下一个观点,那么每个概念的准确定义是什么,因为它们似乎在配置和存储文档中可以互换使用?工作目录只是一个等待修复的过时错误吗?

上面状态的变化是为了解决混淆并表示状态 给定它的 HEAD 是唯一的每个工作树吗?

如果是这种情况,那么每个工作树的 gc 也是唯一的,还是像 fsck 一样在 "database" 上完成?与 stash 的想法相同,stash 是否关心它被称为什么工作树?

在一般的版本控制系统中(不仅仅是 Git),人们总是需要一个工作的地方。用于此位置的 name 各不相同:工作树、工作树、工作目录等。总的来说,工作树或工作树或某些变体可能是自 "work directory" 以来最好的似乎暗示着 "directory-ness".

的单一水平

Git的名字一直有点不一致,但是使用"work tree"或"working tree"的动作已经相当稳定了。从历史上看,当 git worktree 子命令在 Git 版本 2.5 中正式进入 Git 时,这变得更加重要。

所以,具体来说:

Is [the phrase] working directory [in the git stash documentation] just an outdated mistake that is waiting to be fixed?

我会这么说,是的。

Was the change in status above made to solve the confusion and denote that status is unique per-working tree given its HEAD?

是的。但是请注意,git status 基于 三个 项目动态计算状态:HEAD(每个工作树有一个 HEAD),索引(每个工作树有一个索引)和工作树。

(令人困惑的是,任何命令都可以建立自己的临时索引并使用它。每个工作树的一个索引是该工作的一个"real"索引-树,除了由某些命令临时创建并设置到 $GIT_INDEX_FILE 中的任何临时索引。)

If this is the case, then is gc unique per-working tree too, or is it done on the "database" like fsck?

git gc 在数据库上工作。但是,因为它 删除 未引用的对象,所以这是一个特别复杂的情况:它必须查看 every 索引和 every(可能分离)HEAD,这意味着它必须遍历所有工作树。

Same idea with stash, does stash care on what working tree it was called?

git stash 所做的是进行两次(有时是三次)提交。它使它们 from 索引和工作树,所以你在哪个工作树中很重要。(第三次提交,如果存在,保存未跟踪的文件:未跟踪但未被忽略,或未被跟踪(包括被忽略)。这些也来自当前工作树。)

提交本身继续 no 分支。相反,默认情况下,其中一个提交(定位其他提交的提交)存储在 refs/stash 中,使用其 reflog 保留任何先前的 refs/stash 值。