网站建设中,中国大陆地区请使用VPN访问,欢迎提建议,关注LSKR Mastodon

从实用角度出发看懂和使用diff、git diff的合并格式

从实用角度出发分析diff的合并格式以及diff实际用法,结合git以及Github 中git diff格式展示进行分析和使用。


diff 合并格式

读懂diff - 阮一峰的网络日志 (ruanyifeng.com) diff 的用法有很多,默认的格式有三种,这不是本文的重点。本文将详细介绍Git中默认的合并格式的diff用法。

概述

本片文章将会从实战的角度出发,从用户的实际使用的角度出发,学习如何读懂和使用diff的合并格式。不建议用户去使用和学习diff其他格式。diff 合并格式是git以及GitHub的默认显示格式。

格式

我们知道diff 有三个格式,读懂diff - 阮一峰的网络日志 (ruanyifeng.com) 有详细的说明,这里不再重复。

合并格式(unified diff)

本文重点描述的了diff的合并格式,用户并不需要学习其他格式,因为过去的格式不好用才发展处今天的合并格式。

合并格式的diff

diff -u 文件1 文件2  #-u 表示unified 使用合并格式

如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了"合并格式"的diff,将f1和f2的上下文合并在一起显示。

它的使用方法是加入u参数(代表unified)。

  $ diff -u f1 f2

显示结果如下:

  --- f1 2012-08-29 16:45:41.000000000 +0800   +++ f2 2012-08-29 16:45:51.000000000 +0800   @@ -1,7 +1,7 @@    a    a    a   -a   +b    a    a    a

它的第一部分,也是文件的基本信息。

  --- f1 2012-08-29 16:45:41.000000000 +0800   +++ f2 2012-08-29 16:45:51.000000000 +0800

"---"表示变动前的文件,"+++"表示变动后的文件。

第二部分,变动的位置用两个@作为起首和结束。

  @@ -1,7 +1,7 @@

前面的"-1,7"分成三个部分:减号表示第一个文件(即f1),"1"表示第1行,"7"表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,"+1,7"表示变动后,成为第二个文件从第1行开始的连续7行。

第三部分是变动的具体内容。

   a    a    a   -a   +b    a    a    a

除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做"合并格式"。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行。

GitHub(Git) diff

我们知道Git 提供了diff,那么如何看懂了呢?和linux中git的不同之处在哪里呢?

Git diff 对比的提交前和提交后,或者 add 前和add 后的文件对比。

Git 使用了主流的Git 合并格式

在查看Git 提交的时候,默认显示的提交前对比提交后的变动情况。

可以看见,提交前和提高后文件的对比diff 显示情况,很是一目了然。

总结

本文结合 diff的用法,在读懂diff - 阮一峰的网络日志 (ruanyifeng.com) 文章基础上进一步阐释git diff 等系列命令的输出结果。以及在Github 输出结果的表示,其本质都是diff 合并格式的扩展结果。用户只需要学习使用diff的合并格式用法即可。

إرسال تعليق

Cookie Consent
我们使用 Cookie 来了解您如何使用我们的网站并提升您的体验。这包括个性化内容和广告。
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.