Git IndexDiff返回的已修改和已更改的文件状态之间有什么区别?

Git IndexDiff返回的已修改和已更改的文件状态之间有什么区别?,git,jgit,Git,Jgit,我只发现: //在回购协议中,在索引中,内容差异=>已更改 //在索引中,在workdir中,内容不同=>modified 但是我不明白其中的区别?既然你没有得到任何答案,我就给你一个开始 首先,我认为两者之间有区别: 工作目录:这是您正在使用的文件系统。修改文件时,文件系统上的文件将发生更改。通常,这是操作系统保持最新的工作 索引:Git使用什么来了解发生了什么。这是Git跟踪发生了什么的内部机制。尽管对我来说有点模糊,但它应该知道文件系统上的更改或您添加的更改(使用git add[-u])

我只发现:

//在回购协议中,在索引中,内容差异=>已更改 //在索引中,在workdir中,内容不同=>modified


但是我不明白其中的区别?

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

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

  • 工作目录:这是您正在使用的文件系统。修改文件时,文件系统上的文件将发生更改。通常,这是操作系统保持最新的工作

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

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

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

我不知道你在看什么,但你可以在谷歌上搜索git更新索引(我想当你添加git时会调用它)、'git lstat'之类的东西

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

我希望这对你有帮助


Vincent

查看javadoc,查找IndexDiff类中的getter:

/**
 * @return list of files changed from tree to index
 */
public Set<String> getChanged()
/**
*@返回从树更改为索引的文件列表
*/
公共集getChanged()
这些文件在树头点(大多数情况下是当前分支的尖端)和Git索引之间存在差异

/**
 * @return list of files modified on disk relative to the index
 */
public Set<String> getModified()
/**
*@返回相对于索引在磁盘上修改的文件列表
*/
公共集getModified()

这些文件不同于磁盘上的文件(也称为工作树)和Git索引

命令javadoc中没有太多详细说明。
/**
 * @return list of files modified on disk relative to the index
 */
public Set<String> getModified()
我使用了git status来理解git status是如何工作的

简言之:

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

更改-如果您修改现有文件并对其调用“git add…”,您将得到什么


这不是实际答案。忘记添加实际定义,请重新编辑,谢谢@ppperry