1

我发现只有:

// 在 repo 中,在索引中,内容差异 => 已更改 // 在索引中,在 workdir 中,内容不同 => 已修改

但我无法理解其中的区别?

4

3 回答 3

1

查看类 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 索引之间的不同文件

于 2012-08-23T18:22:46.887 回答
1

命令 javadoc 中没有太多详细说明。我使用git status 单元测试来了解git status是如何工作的。

简而言之:

modified - 如果您修改现有文件而不将其添加到索引中,您会得到什么

更改 - 如果您修改现有文件并在其上调用 'git add ...' 会得到什么

于 2015-11-06T21:49:55.190 回答
0

既然你没有得到任何答案,我给你一个开始。

首先,我认为两者之间存在区别:

  • 工作目录:这是您正在处理的文件系统。当您修改文件时,文件系统上的内容已更改。通常,这是操作系统保持最新状态的工作。

  • 索引:Git 使用什么来了解正在发生的事情。这是 Git 内部机制来跟踪发生的事情。即使对我来说有点模糊,它也应该知道文件系统上的更改或您添加的更改(使用 git add [-u]),或者您提交的更改(或所有更改)

  • 存储库/本地副本:您可能拥有不同版本文件的不同位置。Git 使用哈希来保存关于它们的信息(但如果你问这个问题,你应该知道它)

我知道 Git 的一个问题是处理 repo 的大小,当 repo 大小非常大时它会变得很慢。更准确地说,他们的团队正在努力减少 lstat 调用的数量,以更新 Git 对您的文件系统的了解(因此这意味着 Git 通常知道您何时修改工作目录中的文件)

我不知道你在看什么,但你可能会在 google 上搜索 git-update-index(我认为当你执行 git add 时会调用它)、'Git lstat' 或这类东西。

而且,很抱歉,但你的问题真的不清楚:缩写太多,行太少。“内容差异”是否意味着您对内容运行了 diff 命令或内容不同?您的符号不清楚,为什么在您可能列出项目时使用 // 并且 => 表示结果或其他任何内容。人们在回答之前花时间搜索文档,请花时间写清楚的问题。

我希望这能帮到您

文森特

于 2012-08-02T08:23:18.037 回答