这是 git-diff-index 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
git-diff-index - 将树与工作树或索引进行比较
概要
混帐 差异指数 [-m] [--缓存] [ ] [ ...]
商品描述
比较在树对象中找到的 blob 的内容和模式与相应的
在工作树中跟踪文件,或在索引中使用相应的路径。 什么时候
参数存在,只比较匹配这些模式的路径。 否则所有
跟踪的文件进行比较。
配置
-p,-u,--补丁
生成补丁(参见生成补丁部分)。
-s,--无补丁
抑制差异输出。 对像 git show 这样显示补丁的命令很有用
默认,或者取消 --patch 的效果。
-U , --统一=
生成差异上下文而不是通常的三行。 意味着 -p。
- 生的
以原始格式生成差异。 这是默认设置。
--补丁与原始
-p --raw 的同义词。
--最小
花额外的时间来确保产生尽可能小的差异。
- 耐心
使用“耐心差异”算法生成差异。
--直方图
使用“直方图差异”算法生成差异。
--diff-algorithm={耐心|最小|直方图|迈尔斯}
选择差异算法。 变体如下:
默认,迈尔斯
基本的贪心差异算法。 目前,这是默认设置。
最小
花额外的时间来确保产生尽可能小的差异。
忍耐
生成补丁时使用“耐心差异”算法。
直方图
该算法将耐心算法扩展为“支持低发生率的常见
元素”。
例如,如果您将 diff.algorithm 变量配置为非默认值并且
想要使用默认的,那么你必须使用 --diff-algorithm=default 选项。
--统计[= [, [, ]]]
生成差异统计。 默认情况下,将根据需要使用尽可能多的空间
文件名部分,其余部分用于图形部分。 最大宽度默认为终端
宽度,如果未连接到终端,则为 80 列,并且可以被覆盖.
文件名部分的宽度可以通过提供另一个宽度来限制
逗号后。 图形部分的宽度可以通过使用来限制
--stat-graph-width= (影响所有生成统计图的命令)或通过
设置 diff.statGraphWidth= (不影响 git 格式补丁)。 通过给出一个
第三个参数,您可以将输出限制为第一个行,跟随
by ...如果还有更多。
这些参数也可以单独设置 --stat-width= ,
--stat-名称-宽度= 和 --stat-count= .
--numstat
与 --stat 类似,但以十进制表示法显示添加和删除的行数和
没有缩写的路径名,以使其对机器更友好。 对于二进制文件,
输出两个 - 而不是说 0 0。
--shortstat
仅输出包含修改总数的 --stat 格式的最后一行
文件,以及添加和删除的行数。
--dirstat[= ]
输出每个子目录的相对变化量分布。 这
--dirstat 的行为可以通过传递一个逗号分隔的列表来自定义
参数。 默认值由 diff.dirstat 配置变量控制
(见 混帐配置(1))。 以下参数可用:
变化
通过计算已从目录中删除的行来计算 dirstat 数
源,或添加到目标。 这忽略了纯代码的数量
文件中的移动。 换句话说,重新排列文件中的行不是
与其他变化一样重要。 这是没有参数时的默认行为
给出。
生产线
通过进行常规的基于行的差异分析来计算 dirstat 数字,以及
对删除/添加的行数求和。 (对于二进制文件,计算 64 字节块
相反,因为二进制文件没有自然的行概念)。 这是一个更
昂贵的 --dirstat 行为比更改行为更昂贵,但它确实很重要
重新排列文件中的行与其他更改一样多。 结果输出是
与您从其他 --*stat 选项中获得的内容一致。
档
通过计算更改的文件数来计算 dirstat 数。 每一个都变了
文件在 dirstat 分析中同等重要。 这是计算上最便宜的
--dirstat 行为,因为它根本不必查看文件内容。
累积的
也计算父目录的子目录中的更改。 注意
使用累积时,报告的百分比总和可能超过 100%。 这
默认(非累积)行为可以用 noncumulative 指定
参数。
整数参数指定截止百分比(默认为 3%)。 目录
低于此百分比的更改不会显示在输出中。
示例:以下将计算更改的文件,同时忽略较少的目录
超过更改文件总数的 10%,并且累积子目录计数
在父目录中:--dirstat=files,10,cumulative。
- 概括
输出扩展头信息的浓缩摘要,例如创建、重命名
和模式改变。
--补丁与统计
-p --stat 的同义词。
-z
当--raw、--numstat、--name-only 或--name-status 已给出时,不要乱写
路径名并使用 NUL 作为输出字段终止符。
如果没有这个选项,每个路径名输出都会有 TAB、LF、双引号和
反斜杠字符分别替换为 \t、\n、\" 和 \\,以及路径名
如果发生任何这些替换,将用双引号括起来。
--仅名称
仅显示更改文件的名称。
--名称-状态
仅显示更改文件的名称和状态。 参见 --diff-filter 的描述
状态字母含义的选项。
--子模块[= ]
指定如何显示子模块中的差异。 当 --submodule 或 --submodule=log
给定, 日志 格式被使用。 这种格式列出了范围内的提交,如 混帐-
子模块(1) 总结确实。 省略 --submodule 选项或指定
--submodule=short,使用 短 格式。 这种格式只显示名称
在范围的开头和结尾提交。 可以通过 diff.submodule 进行调整
配置变量。
--颜色[= ]
显示彩色差异。 --color(即没有 =) 与 --color=always 相同。
可以是永远、从不或自动之一。
--无色
关闭彩色差异。 它与 --color=never 相同。
--word-diff[= ]
显示一个单词差异,使用分隔更改的单词。 默认情况下,单词是
以空格分隔; 请参阅下面的 --word-diff-regex。 这默认为 平原,
并且必须是以下之一:
颜色
仅使用颜色突出显示更改的单词。 暗示--颜色。
平原
将单词显示为 [-removed-] 和 {+ added+}。 不尝试逃离
如果分隔符出现在输入中,则输出可能不明确。
瓷
使用专门用于脚本使用的基于行的特殊格式。
添加/删除/未更改的运行以通常的统一差异格式打印,
以行首的 +/-/` ` 字符开始并扩展到
行尾。 输入中的换行符由一行中的波浪号 ~ 表示
它自己的。
没有
再次禁用 word diff。
请注意,尽管名称为第一种模式,但颜色用于突出显示已更改的
如果启用,所有模式下的零件。
--word-diff-regex=
用决定一个词是什么,而不是考虑非空白的运行
成为一个词。 也暗示 --word-diff 除非它已经启用。
每个不重叠的匹配被认为是一个词。 之间的任何东西
这些匹配项被视为空格并被忽略(!)以便查找
差异。 您可能希望将 |[^[:space:]] 附加到您的正则表达式以
确保它匹配所有非空白字符。 包含换行符的匹配项是
在换行符处默默地截断(!)。
例如,--word-diff-regex=。 将每个字符视为一个单词,并且,
相应地,逐字显示差异。
也可以通过差异驱动程序或配置选项设置正则表达式,请参阅
git 属性(1)或 混帐配置(1). 给它显式覆盖任何差异驱动程序或
配置设置。 差异驱动程序覆盖配置设置。
--color-words[= ]
等效于 --word-diff=color plus(如果指定了正则表达式)
--word-diff-regex= .
--no-重命名
关闭重命名检测,即使配置文件给出了默认做
所以。
- 查看
如果更改引入空格错误,则发出警告。 什么被认为是空白错误是
由 core.whitespace 配置控制。 默认情况下,尾随空格
(包括仅由空格组成的行)和一个空格字符
在该行的初始缩进中紧跟一个制表符是
考虑空格错误。 如果发现问题,则以非零状态退出。 不是
与 --exit-code 兼容。
--ws-error-highlight=
突出显示由指定的行上的空白错误以指定的颜色
color.diff.whitespace。 是旧的、新的、上下文的逗号分隔列表。 什么时候
未给出此选项,仅突出显示新行中的空白错误。 例如
--ws-error-highlight=new,old 突出显示删除和添加的空白错误
线。 all 可以用作旧的、新的、上下文的简写。
--全索引
显示完整的前图像和后图像 blob,而不是前几个字符
生成补丁格式输出时“索引”行上的对象名称。
--二进制
除了 --full-index 之外,输出一个可以与 git-apply 一起应用的二进制差异。
--缩写[= ]
而不是在 diff-raw 格式输出中显示完整的 40 字节十六进制对象名称
和 diff-tree 标题行,仅显示部分前缀。 这独立于
--full-index 上面的选项,它控制差异补丁输出格式。 非默认
可以使用 --abbrev= 指定位数.
-B[ ][/ ], --break-rewrites[=[ ][/ ]]
将完整的重写更改分解为删除和创建对。 这服务于两个
用途:
它会影响相当于完全重写文件而不是一系列文件的更改方式
删除和插入混合在一起的极少数恰好匹配的行
文本作为上下文,但作为一个单一的删除所有旧的,然后是一个
单次插入所有新内容,数字 m 控制 -B 的这一方面
选项(默认为 60%)。 -B/70% 指定少于原件的 30%
保留在结果中,让 Git 将其视为完全重写(即,否则
结果补丁将是一系列与上下文混合在一起的删除和插入
行)。
与 -M 一起使用时,完全重写的文件也被视为
重命名(通常 -M 只将消失的文件视为重命名的来源),
数字 n 控制 -B 选项的这一方面(默认为 50%)。 -B20%
指定与添加和删除相比的 20% 或更多的更改
文件的大小有资格被选取作为重命名的可能来源
另一个文件。
-M[ ], --find-renames[= ]
检测重命名。 如果指定了 n,则它是相似度指数上的阈值(即
与文件大小相比的添加/删除量)。 例如,-M90% 表示
如果超过 90% 的文件,Git 应该将删除/添加对视为重命名
没有改变。 没有 % 符号,数字将被读作分数,带有
前面的小数点。 即,-M5变为0.5,因此与-M50%相同。
同样,-M05 与-M5% 相同。 要将检测限制为精确重命名,请使用 -M100%。
默认相似度指数为 50%。
-C[ ], --find-copies[= ]
检测副本以及重命名。 另见--find-copies-harder。 如果指定了 n,则它
与 -M 的含义相同.
--查找副本更难
出于性能原因,默认情况下,-C 选项仅在原始文件
在同一个变更集中修改了副本。 此标志使命令检查
未修改的文件作为副本源的候选者。 这是一个非常昂贵的
大项目操作,慎用。 提供多个 -C 选项
具有相同的效果。
-D, --不可逆删除
省略删除的原像,即只打印标题而不打印标题之间的差异
原像和 /dev/null。 生成的补丁不打算与补丁一起应用或
git申请; 这仅适用于只想专注于审查
更改后的文本。 此外,输出显然缺乏足够的信息
反向应用这样的补丁,甚至手动应用,因此该选项的名称。
与 -B 一起使用时,还省略 a 的删除部分中的原像
删除/创建对。
-l
-M 和 -C 选项需要 O(n^2) 处理时间,其中 n 是
潜在的重命名/复制目标。 此选项可防止重命名/复制检测运行
如果重命名/复制目标的数量超过指定的数量。
--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
仅选择添加 (A)、复制 (C)、删除 (D)、修改 (M)、重命名的文件
(R), 改变它们的类型 (即常规文件, 符号链接, 子模块, ...), 是
未合并 (U)、未知 (X) 或配对已损坏 (B)。 任意组合
可以使用的过滤器字符(包括无)。 添加 * (All-or-none) 时
到组合,如果有任何文件匹配其他路径,则选择所有路径
比较标准; 如果没有符合其他条件的文件,则没有
被选中。
-S
查找更改指定字符串出现次数的差异
(即添加/删除)在一个文件中。 供脚本编写者使用。
当您正在寻找确切的代码块(如结构)并且想要
要了解该块自首次出现以来的历史:使用该功能
迭代地将原像中的有趣块送回 -S,然后继续
直到您获得该块的第一个版本。
-G
查找补丁文本包含匹配的添加/删除行的差异.
为了说明 -S 之间的区别--pickaxe-regex 和 -G , 考虑
在同一文件中具有以下差异的提交:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
虽然 git log -G"regexec\(regexp" 将显示此提交,但 git log -S"regexec\(regexp"
--pickaxe-regex 不会(因为该字符串的出现次数没有
改变)。
查看 鹤嘴锄 进入 git差异核心(7) 了解更多信息。
--全部镐
当 -S 或 -G 发现更改时,显示该更改集中的所有更改,而不仅仅是
包含更改的文件.
--pickaxe-正则表达式
对待将 -S 作为扩展的 POSIX 正则表达式提供给匹配。
-O
按照指定的顺序输出补丁, 它有一个 shell glob
每行图案。 这会覆盖 diff.orderFile 配置变量(请参阅 混帐-
配置(1))。 要取消 diff.orderFile,请使用 -O/dev/null。
-R
交换两个输入; 也就是说,显示从索引或磁盘文件到树的差异
内容。
--相对[= ]
当从项目的子目录运行时,可以告诉它排除外部的更改
目录并使用此选项显示相对于它的路径名。 当你不在
一个子目录(例如在裸存储库中),您可以命名要创建的子目录
通过给出一个相对于的输出作为论据。
-a,--文本
将所有文件视为文本。
--忽略 eol 处的空间
在 EOL 时忽略空格的变化。
-b,--忽略空格更改
忽略空格量的变化。 这会忽略行尾的空格,并且
认为一个或多个空白字符的所有其他序列是等效的。
-w,--忽略所有空间
比较行时忽略空格。 即使一行有差异,这也会忽略差异
另一行没有的空白。
--忽略空白行
忽略所有行都是空白的更改。
--inter-hunk-context=
显示差异块之间的上下文,最多指定行数,从而
融合彼此接近的帅哥。
-W,--函数上下文
显示整个变化的周围功能。
--退出代码
使用类似的代码使程序退出 差异(1). 也就是说,如果有,它以 1 退出
有差异,0 表示没有差异。
- 安静的
禁用程序的所有输出。 暗示 --exit-code。
--ext 差异
允许执行外部差异帮助程序。 如果您设置外部差异驱动程序
git 属性(5)、你需要使用这个选项 混帐日志(1)和朋友。
--无扩展差异
禁止外部差异驱动程序。
--textconv, --no-textconv
在比较二进制文件时允许(或禁止)运行外部文本转换过滤器
文件。 看 git 属性(5) 详情。 因为 textconv 过滤器通常是一个
单向转换,产生的差异适合人类消费,但不能
被应用。 因此,默认情况下仅启用 textconv 过滤器 混帐-
差异(1)和 混帐日志(1),但不是为了 git-格式补丁(1) 或 diff 管道命令。
--忽略子模块[= ]
忽略差异生成中对子模块的更改。 可以是“无”,
“untracked”、“dirty”或“all”,这是默认值。 使用“无”将考虑
子模块在包含未跟踪或修改的文件或其 HEAD 时被修改
与超级项目中记录的提交不同,可用于覆盖任何
的设置 忽略 选项 混帐配置(1)或 git模块(5). 当“未跟踪”是
当使用的子模块仅包含未跟踪的内容时,它们不被认为是脏的(但是
他们仍然会扫描修改的内容)。 使用“dirty”会忽略对
子模块的工作树,仅对存储在超级项目中的提交进行更改
显示(这是 1.7.0 之前的行为)。 使用“all”隐藏所有更改
子模块。
--src-前缀=
显示给定的源前缀而不是“a/”。
--dst-前缀=
显示给定的目的地前缀而不是“b/”。
--无前缀
不要显示任何源或目标前缀。
有关这些常用选项的更详细说明,另请参见 git差异核心(7)。
要比较的树对象的 id。
--缓存
根本不考虑磁盘文件
-m
默认情况下,记录在索引中但未检出的文件报告为已删除。
这面旗帜使 混帐 差异指数 说所有未签出的文件都是最新的。
未处理 OUTPUT FORMAT
“git-diff-index”、“git-diff-tree”、“git-diff-files”和“git”的原始输出格式
diff --raw" 非常相似。
这些命令都比较两组事物; 比较的是什么不同:
git-diff-index
比较以及文件系统上的文件。
git-diff-index --cached
比较和指数。
git-diff-tree [-r] [ ...]
比较由两个参数命名的树。
git-diff-files [ ...]
比较索引和文件系统上的文件。
“git-diff-tree”命令通过打印当前内容的哈希值开始输出
比较的。 之后,所有命令都会为每个更改的文件打印一个输出行。
输出行的格式如下:
就地编辑:100644 100644 bcd1234... 0123456... M file0
复制编辑:100644 100644 abcd123 ... 1234567 ... C68 file1 file2
重命名编辑:100644 100644 abcd123 ... 1234567 ... R86 file1 file3
创建:000000 100644 0000000... 1234567...一个文件4
删除:100644 000000 1234567... 0000000... D file5
未合并:000000 000000 0000000... 0000000... U file6
也就是说,从左到右:
1. 一个结肠。
2. “src”的模式; 如果创建或未合并,则为 000000。
3.一个空间。
4.“dst”模式; 如果删除或未合并,则为 000000。
5.一个空间。
6. sha1 代表“src”; 0{40} 如果创建或未合并。
7.一个空间。
8. sha1 代表“dst”; 0{40} 如果创建、未合并或“查看工作树”。
9.一个空间。
10. 状态,后跟可选的“分数”数字。
11. 一个选项卡或一个 NUL 当 -z 选项被使用。
12. “src”的路径
13. 一个选项卡或一个 NUL 当 -z 使用选项; 只存在于 C 或 R。
14. “dst”的路径; 只存在于 C 或 R。
15. LF 或 NUL -z 选项用于终止记录。
可能的状态字母是:
·A:添加一个文件
· C:复制一个文件到一个新的
·D:删除文件
· M:修改文件的内容或方式
· R:重命名文件
· T:改变文件类型
· U:文件未合并(必须完成合并后才能提交)
· X:“未知”更改类型(很可能是一个错误,请报告)
状态字母 C 和 R 后面总是跟一个分数(表示
移动或复制的源和目标之间的相似性)。 状态字母 M 可能是
后跟文件重写的分数(表示不同的百分比)。
如果文件系统上的文件是新文件并且与文件不同步,则显示为全 1
指数。
计费示例:
:100644 100644 5be4a4...... 000000...... M 文件.c
不使用 -z 选项时,表示路径名中的 TAB、LF 和反斜杠字符
分别为 \t、\n 和 \\。
DIFF FORMAT 用于 合并
“git-diff-tree”、“git-diff-files”和“git-diff --raw”可以 -c or --抄送 选项
也为合并提交生成差异输出。 输出与描述的格式不同
以上通过以下方式:
1. 每个父母都有一个冒号
2.有更多的“src”模式和“src”sha1
3. status 是每个父级的连接状态字符
4.没有可选的“分数”数字
5. 单一路径,只针对“dst”
计费示例:
::100644 100644 100644 fabdb8 ... cc95eb0 ... 4866510 ... MM describe.c
需要注意的是 的 差异 仅列出所有父项修改过的文件。
生成 补丁 与 -P
当“git-diff-index”、“git-diff-tree”或“git-diff-files”使用 -p 选项,“git
差异”没有 - 生的 选项,或带有“-p”选项的“git log”,它们不会产生
上述输出; 相反,他们生成一个补丁文件。 您可以自定义创建
这些补丁通过 GIT_EXTERNAL_DIFF 和 GIT_DIFF_OPTS 环境变量。
-p 选项产生的内容与传统的 diff 格式略有不同:
1. 它前面有一个“git diff”标题,如下所示:
差异 --git a/file1 b/file2
除非涉及重命名/复制,否则 a/ 和 b/ 文件名是相同的。 特别是,即使
对于创建或删除,/dev/null 是 而不去 代替 a/ 或 b/
文件名。
当涉及重命名/复制时,file1 和file2 显示源文件的名称
重命名/复制和重命名/复制产生的文件的名称,分别。
2. 后面跟着一个或多个扩展的标题行:
旧模式
新模式
删除文件模式
新文件模式
复制自
复制到
重命名自
重命名为
相似指数
相异指数
指数..
文件模式打印为 6 位八进制数,包括文件类型和文件
权限位。
扩展头中的路径名不包括 a/ 和 b/ 前缀。
相似指数是不变行的百分比,相异指数是
是更改行的百分比。 它是一个向下舍入的整数,后跟一个
百分号。 100% 的相似性指数值因此保留给两个相等的文件,
而 100% 的不同意味着旧文件中没有任何行进入新文件
一。
索引行包括更改前后的 SHA-1 校验和。 这是
如果文件模式没有改变,则包括在内; 否则,单独的行表示旧的
和新模式。
3.路径名中的TAB、LF、双引号和反斜杠字符表示为\t、\n、
\" 和 \\,分别。如果需要这样的替换,那么整个
路径名放在双引号中。
4.输出中的file1文件全部引用commit前的文件,file2全部引用
文件是指提交后的文件。 将每个更改应用于每个更改是不正确的
依次归档。 例如,这个补丁将交换 a 和 b:
差异 --git a/ab/b
从一个重命名
重命名为 b
差异 --git a/bb/a
从 b 重命名
重命名为
组合式 DIFF FORMAT
任何差异生成命令都可以使用 -c 或 --cc 选项来生成 的 差异 ,尤其是
显示合并。 这是显示合并时的默认格式 混帐差异(1)或 混帐-
显示(1). 另请注意,您可以为这些命令中的任何一个提供 -m 选项以强制
与合并的单个父代产生差异。
A 的 差异 格式如下:
差异——组合描述.c
索引 fabdb8,cc95eb0..4866510
--- a/描述.c
+++ b/描述.c
@@@ -98,20 -98,12 +98,20 @@@
返回 (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1;
}
- 静态无效描述(char *arg)
-静态无效描述(结构提交* cmit,int last_one)
++静态无效描述(char * arg,int last_one)
{
+ 无符号字符 sha1[20];
+ 结构提交 *cmit;
结构 commit_list *list;
静态 int 初始化 = 0;
结构 commit_name *n;
+ if (get_sha1(arg, sha1) < 0)
+ 用法(describe_usage);
+ cmit = Lookup_commit_reference(sha1);
+ 如果 (!cmit)
+ 用法(describe_usage);
+
如果(!初始化){
初始化 = 1;
for_each_ref(get_name);
1.它前面有一个“git diff”标题,看起来像这样(当 -c 选项是
用过的):
diff --组合文件
或像这样(当 --抄送 使用选项):
diff --cc 文件
2. 后面跟着一个或多个扩展的标题行(这个例子显示了一个与
两个父母):
指数, ..
模式, ..
新文件模式
删除文件模式,
模式, .. 仅当至少有以下一项时才会出现该行是
与其他人不同。 包含有关检测到的内容的信息的扩展标头
运动(重命名和复制检测)旨在与两个差异一起使用
并且不用于组合差异格式。
3.后面跟着两行from-file/to-file头
- - 一份文件
+++ b/文件
类似于传统的两行标题 统一 diff 格式,/dev/null 用于
信号创建或删除的文件。
4.修改了chunk header格式,防止人们误喂
补丁-p1。 为审查合并提交更改而创建了组合差异格式,并且
不是为了申请。 变化类似于扩展中的变化 指数
标头:
@@@ @@@
组合差异的块头中有(父母数 + 1)@ 个字符
格式。
不同于传统的 统一 diff 格式,显示两个文件 A 和 B
具有 -(减号 — 出现在 A 中但在 B 中删除)、+(加号 — A 中缺失但
添加到 B) 或“”(空格 — 未更改)前缀,此格式比较两个或多个文件
file1, file2,... 一个文件 X,并显示 X 与每个文件 N 的不同之处。 一栏
对于每个 fileN 都附加到输出行以注意 X 的行与
它。
N列中的-字符表示该行出现在fileN中但没有出现
结果中。 第 N 列中的 + 字符表示该行出现在结果中,
并且 fileN 没有该行(换句话说,该行是从
该父母的看法)。
在上面的示例输出中,函数签名从两个文件中更改(因此两个
- 从文件 1 和文件 2 中删除,加上 ++ 表示添加的一行没有
出现在文件 1 或文件 2 中)。 还有八行与 file1 相同,但做
未出现在 file2 中(因此以 + 为前缀)。
当由 git diff-tree -c 显示时,它将合并提交的父项与合并进行比较
结果(即 file1..fileN 是父母)。 当 git diff-files -c 显示时,它比较
两个未解决的合并父级与工作树文件(即 file1 是第 2 阶段又名
“我们的版本”,file2 是第 3 阶段,又名“他们的版本”)。
其他 DIFF FORMATS
--summary 选项描述新添加、删除、重命名和复制的文件。 --stat
选项添加 差异统计(1) 图到输出。 这些选项可以与其他选项结合使用
选项,例如 -p,供人类使用。
当显示涉及重命名或复制的更改时,--stat 输出格式化
通过组合路径名的通用前缀和后缀来紧凑地生成路径名。 例如,一个
将 arch/i386/Makefile 移动到 arch/x86/Makefile 而修改 4 行的更改将是
显示如下:
arch/{i386 => x86}/Makefile | 4 +--
--numstat 选项给出了 差异统计(1) 信息,但专为更简单的机器而设计
消耗。 --numstat 输出中的条目如下所示:
1 2 自述文件
3 1 arch/{i386 => x86}/Makefile
也就是说,从左到右:
1.添加的行数;
2.一个标签;
3.删除的行数;
4.一个标签;
5. 路径名(可能带有重命名/复制信息);
6.换行。
当 -z 输出选项生效时,输出的格式如下:
1 2 自述文件 NUL
3 1 NUL 架构/i386/Makefile NUL 架构/x86/Makefile NUL
是:
1.添加的行数;
2.一个标签;
3.删除的行数;
4.一个标签;
5.一个NUL(仅在重命名/复制时存在);
6. 原像中的路径名;
7.一个NUL(仅在重命名/复制时存在);
8. postimage 中的路径名(仅在重命名/复制时存在);
9. NUL。
在重命名的情况下原像路径之前的额外 NUL 是允许脚本读取
输出以判断正在读取的当前记录是单路径记录还是重命名/复制
无需提前阅读即可记录。 读完加删行后,读到NUL
将产生路径名,但如果它是 NUL,则记录将显示两条路径。
操作 模式
您可以选择是否完全信任索引文件(使用 --缓存 旗帜)
或要求 diff 逻辑显示任何与 stat 状态不匹配的文件
“暂时改变”。 这两个操作确实非常有用。
缓存 MODE
If --缓存 指定,它允许您询问:
显示 HEAD 和当前索引之间的差异
内容(我使用“git write-tree”编写的内容)
例如,假设您已经在工作目录上工作,更新了一些文件
在索引中并准备提交。 你想确切地看到 什么 你会
提交,而不必编写一个新的树对象并以这种方式进行比较,然后这样做,
你只是做
git diff-index --缓存 HEAD
示例:假设我已将 commit.c 重命名为 git-commit.c,并且我已完成更新索引
使其在索引文件中生效。 git diff-files 根本不会显示任何内容,
因为索引文件匹配我的工作目录。 但是做一个 混帐 差异指数 作用:
托瓦兹@ppc970:〜/git> git diff-index --cached HEAD
-100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 commit.c
+100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 git-commit.c
你可以很容易地看到上面是一个重命名。
其实 git diff-index --cached 应该 总是完全等同于实际做一个
混帐 写树 并进行比较。 除了这个更适合你的情况
只是想看看你在哪里。
所以当你问自己的时候,做一个 git diff-index --cached 基本上是非常有用的
“我已经标记为已提交的内容,与之前的有什么不同
树”。
非缓存 MODE
“非缓存”模式采用不同的方法,并且可能更有用
两者不能用 混帐 写树 + 混帐 差异树。 从而
这是默认模式。 非缓存版本提出了以下问题:
给我看看 HEAD 和当前检出的区别
树 - 索引内容 _and_ 不是最新的文件
这显然也是一个非常有用的问题,因为它告诉你你 可以 犯罪。
同样,输出匹配 混帐 差异树 -r 输出到发球台,但有一个扭曲。
扭曲的是,如果某个文件与索引不匹配,我们就没有后备存储
事情,我们使用神奇的“全零”sha1 来证明这一点。 所以让我们说你
已经编辑了 kernel/sched.c,但实际上还没有完成 混帐 更新索引 还没有-
没有与新状态相关联的“对象”,您会得到:
托瓦兹@ppc970:〜/v2.6/linux> git diff-index --abbrev HEAD
:100644 100664 7476bb... 000000...内核/sched.c
即,它显示树已更改,并且 kernel/sched.c 不是最新的
并且可能包含新的东西。 全零 sha1 意味着要获得真正的差异,您需要
直接查看工作目录中的对象,而不是进行对象到对象
差异。
备注
与其他此类命令一样, 混帐 差异指数 实际上并不看
文件的内容。 所以也许 kernel/sched.c 实际上并没有改变,而是
只是你触摸了它。 无论哪种情况,您都需要注意 混帐
更新索引 它使索引同步。
备注
您可以将混合文件显示为“已更新”和“在
工作目录”在一起。你总是可以知道哪个文件处于哪个状态,
由于“已更新”显示有效的 sha1,并且“与
index" 将始终具有特殊的全零 sha1。
GIT
部分 混帐(1) 套房
使用 onworks.net 服务在线使用 git-diff-index