我发现只有:
// 在 repo 中,在索引中,内容差异 => 已更改 // 在索引中,在 workdir 中,内容不同 => 已修改
但我无法理解其中的区别?
查看类 IndexDiff 中的 getter 的 javadoc:
/**
* @return list of files changed from tree to index
*/
public Set<String> getChanged()
这些是树 HEAD 点(在大多数情况下是当前分支的尖端)和 Git 索引之间不同的文件
/**
* @return list of files modified on disk relative to the index
*/
public Set<String> getModified()
这些是磁盘上的文件(又名工作树)和 Git 索引之间的不同文件
命令 javadoc 中没有太多详细说明。我使用git status 单元测试来了解git status是如何工作的。
简而言之:
modified - 如果您修改现有文件而不将其添加到索引中,您会得到什么
更改 - 如果您修改现有文件并在其上调用 'git add ...' 会得到什么
既然你没有得到任何答案,我给你一个开始。
首先,我认为两者之间存在区别:
工作目录:这是您正在处理的文件系统。当您修改文件时,文件系统上的内容已更改。通常,这是操作系统保持最新状态的工作。
索引:Git 使用什么来了解正在发生的事情。这是 Git 内部机制来跟踪发生的事情。即使对我来说有点模糊,它也应该知道文件系统上的更改或您添加的更改(使用 git add [-u]),或者您提交的更改(或所有更改)
存储库/本地副本:您可能拥有不同版本文件的不同位置。Git 使用哈希来保存关于它们的信息(但如果你问这个问题,你应该知道它)
我知道 Git 的一个问题是处理 repo 的大小,当 repo 大小非常大时它会变得很慢。更准确地说,他们的团队正在努力减少 lstat 调用的数量,以更新 Git 对您的文件系统的了解(因此这意味着 Git 通常知道您何时修改工作目录中的文件)
我不知道你在看什么,但你可能会在 google 上搜索 git-update-index(我认为当你执行 git add 时会调用它)、'Git lstat' 或这类东西。
而且,很抱歉,但你的问题真的不清楚:缩写太多,行太少。“内容差异”是否意味着您对内容运行了 diff 命令或内容不同?您的符号不清楚,为什么在您可能列出项目时使用 // 并且 => 表示结果或其他任何内容。人们在回答之前花时间搜索文档,请花时间写清楚的问题。
我希望这能帮到您
文森特