Git 2.19 对 Diff、Branch 和 Grep 等做了改进

  • Sergio De Simone
  • 姚佳灵

2018 年 9 月 18 日

话题:开源DevOpsGit语言 & 开发

Git 的最新版带来了丰富的新功能以及内部更新,包括改进的 diff、branch 和 grep,更好的命令行补全,新的 range-diff 命令等。 Git diff 现在可以正确地标记以 intent-to-add 参数添加的新文件路径。intent-to-add 可以和 git add 命令一起使用,完整写法即 git add --intent-to-add< 文件名 >,以给工作树添加一个空文件。这很有用,这样 git diff 可以在其输出中展示新文件的完整内容。但是之前,diff 中的文件路径没有被标记成新的。在一份相关说明提到,apply 命令也改进了其对 intent-to-add 选项的处理。事实上,现在在应用补丁时,给索引添加新路径只影响到用 intent-to-add 添加了所有新文件的工作树。回过来看 diff,color-moved 选项已经扩展为支持新的 color-moved-ws 变体,它专门制作 git diff 移动的彩色行,而其他未改变则显示空白。Git 2.18 中类似的功能是利用 color-moved 和 ignore-space-change 来实现的,尽管后一个选项将被应用于整个输出,而不只是移动的行。 Git grep 有了两个新选项:列(column),它给输出添加第一个匹配的列号;以及唯一匹配的(only-matching),它限制输出为正则表达式的匹配部分,而不是整个匹配行。

Git 2.19 用两种方式改进了 git branch 列表。首先,git branch –list 现在从 branch.sort 配置变量读取其默认排序选项,与 git tag –list 从 tag.sort 中获取其默认排序选项类似。此外,git branch 的 -l 选项(它是 -create-reflog 的简写)已经被弃用,以防止开发人员无意中把它当做 -list 的别名使用。

自 2.6 版本开始,Git 提供 git fsck 命令以检查被推送到存储库的对象的完整性。这项测试可以在接收端执行,并用 receive.fsck.* 变量进行配置。例如,如果因为 zero-padded 文件模式定义 receive.fsck.zeroPaddedFilemode 变量导致 fsck 失败的话,您可以让 Git 拒绝推送。Git 2.19 利用 fetch.fsck.* 变量,为 git fetch 提供相似的功能。 在实现方面,git 子模块 foreach 用 C 进行了重写,性能因此得到了改进。此外,对命令行补全的支持也得到了改进,现在会列出子命令所用的配置变量列表和包括带 -no- 前缀的选项。git fetch 命令支持新的 -negotiation-tip 选项以减少返回的提交集。当本地存储库具有在远程历史记录中不存在的大量引用时,这能提高带宽和性能。 在开发方面,Git 2.19 已经禁用 strcat,这被认为太危险了,现在会引起编译失败。

还有很多 Git 2.19 中的新功能我们没有在这里进行介绍。如果您有兴趣了解全部的细节,请别错过官方发布说明。

查看英文原文:Git 2.19 Improves Diff, Branch, and Grep, and More  

感谢冬雨对本文的审校。

开源DevOpsGit语言 & 开发