工作树 vs 工作目录

34
我正在阅读Git v2.9.1的发布说明,其中的一个更改内容如下:

“git status”过去在指代“工作区”时会使用“working directory”。

这两者有什么区别?何时会用到git status指的是“工作区”?

3个回答

30

这样做是为了提高一致性并避免歧义。正如在更改此行为的提交中所解释的那样:

工作目录很容易与当前目录混淆。

因此,这个更改是为了更好地区分工作树,即您的存储库已被检出的位置,和工作目录,您正在其中运行git status命令的位置,该位置可能位于您的工作树下方(或者如果您设置了GIT_WORK_TREE环境变量,则可能不是这样)。


2
现在它只是一直说“工作树”吗?这也会误导人。如果你运行 git status .,你实际上得到的是工作目录的状态。如果你运行 git status somesubdir,那么结果既不是关于当前工作目录,也不是关于整个工作树的... - user2404501
@WumpusQ.Wumbley 是的,没错。如果你向 git-status 提供路径规范,并且它们没有被修改,那么即使工作树的其他部分不干净,它也会显示 nothing to commit, working tree clean。我同意这不是最优的,但比以前也不差。 - Edward Thomson

12

这里有一个微妙的意义差别。

目录是单一的事物——一个文件夹,一组文件——而 工作树 指的是文件和目录的树形结构,它们共同被引用。

工作树指包含 .git 文件夹的目录,包括所有子目录和文件。

要更完全地理解这个概念,你必须了解谁创建了 Git:Linus Torvalds。Git 中的所有内容都与 Linux 命名约定和思维过程紧密相关,包括 Git 如何“思考”文件或文件系统:

来自3.1.3. 更多文件系统布局

为了方便起见,Linux 文件系统通常被认为是一个树形结构。在标准的 Linux 系统上,你会发现布局通常遵循以下方案。

Linux 文件系统图示

因此,它被称为“工作树”,因为 Linux 内核/文件系统开发人员构建了 Git,在 Linux 中,文件系统被视为“树形结构”。


7

当前目录

是你当前文件夹的位置,命令行ls列出当前目录中的所有项目

工作树

是你当前目录和其中所有目录路径的集合。如果是我的话,我会将其重命名为 "工作目录树",这样术语“树”更适用于你脑海中的目录结构,而不是git树形结构。

工作目录

含糊而不确定地用于引用这两种情况,请不要使用此单词,它会让每个人都感到困惑。


1
我认为要知道你的当前目录,你可以在控制台中使用命令“pwd”,对吗? - Richard Steele
@RichardSteele 正确。pwd 是一个 Unix/Linux(不是 git)命令,意思是“打印当前工作目录”,而在这里使用“工作目录”这个词正是 Linus Torvalds 不希望让 git 用户感到困惑的事情。不幸的是,我们晚了大约50年才想到将其改名为 pcd - LastStar007
@RichardSteele 正确。pwd 是一个 Unix/Linux(不是 git)命令,意思是“打印当前工作目录”,而在这里使用“工作目录”这个词正是 Linus Torvalds 不希望让 git 用户感到困惑的事情。不幸的是,我们晚了大约50年才想到将其改名为 pcd - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接