Jgit源码阅读——文件差异比较就是比较index文件的差别
git比较文件差异是根据当前的index文件进行差量比较的.
这些差量信息如:
added files 已经add进index的file,也就是在objects目录中存在备份的file
changed files 内容发生改变,而且在index和版本库中都存在记录的file
removed files 已经被移除的file
missing files 已经不存在的file
modified files 内容发生改变,而且受控目录和index都存在的file
conflicting files 与已经存在版本相冲突的file
untracked files 还没被add进index的file
files with assume-unchanged flag 这个,知道说一下
这个是IndexDiff类中比较当前workTree跟版本库中文件状态 最关键的部分
/** The standard (fully merged) stage for an entry. */public static final int STAGE_0 = 0;/** The base tree revision for an entry. */public static final int STAGE_1 = 1;/** The first tree revision (usually called "ours"). */public static final int STAGE_2 = 2;/** The second tree revision (usually called "theirs"). */public static final int STAGE_3 = 3;.
这个时候,在受控目录中的文件为冲突态.
78行:如果已经存在index和版本库中,这个文件内容又发生了改变,这个时候,这个文件是changes状态
82-84行:在版本库中,但是已经不在index状态了,是remove状态,
102行,:如果该文件在index中,但是在受控目录不见了,定义为missing状态,一般在eclipse的egit中可以看到这个状态
不一一分析,从此可以看到git在切换分支的时候如此之快,其实就是拿index出来比较,因为index已经索引了文件在objects的位置.
作者:http://414149609.iteye.com/admin/blogs/1668995