小妖女 发表于 2015-1-15 22:16:46

来讲讲:读懂diff

只要了解了Linux的基础之后,应该就可以很轻易的解决掉这方面的问题。而有些朋友们常常一接触Linux就是希望构架网站,根本没有想到要先了解一下Linux的基础。这是相当困难的。
  diff是Unix体系的一个很主要的工具程序。

  它用来对照两个文本文件的差别,是代码版本办理的基石之一。你在命令行下,输出:
  $diff<变化前的文件><变化后的文件>
  diff就会告知你,这两个文件有何差别。它的显现了局不太好懂,上面我就来讲明,怎样读懂diff。



  1、diff的三种格局

  因为汗青缘故原由,diff有三种格局:
  *一般格局(normaldiff)
  *高低文格局(contextdiff)
  *兼并格局(unifieddiff)
  我们顺次来看。
  2、示例文件

  为了便于解说,先新建两个示例文件。
  第一个文件叫做f1,内容是每行一个a,一共7行。
  a
  a
  a
  a
  a
  a
  a
  第二个文件叫做f2,修正f1而成,第4行酿成b,其他稳定。
  a
  a
  a
  b
  a
  a
  a
  3、一般格局的diff

  如今对f1和f2举行对照:
  $difff1f2
  这时候,diff就会显现一般格局的了局:
  4c4
  <a
  ---
  >b
  第一行是一个提醒,用来讲明变化地位。
  4c4
  它分红三个部分:后面的"4",暗示f1的第4行有变更;两头的"c"暗示变化的形式是内容改动(change),其他形式另有"增添"(a,代表addition)和"删除"(d,代表deletion);前面的"4",暗示变化后酿成f2的第4行。
  第二行分红两个部分。
  <a
  后面的小于号,暗示要从f1傍边往除该行(也就是第4行),前面的"a"暗示该行的内容。
  第三行用来支解f1和f2。
  ---
  第四行,相似于第二行。
  >b
  后面的年夜于号暗示f2增添了该行,前面的"b"暗示该行的内容。
  最早的Unix(即AT&T版本的Unix),利用的就是这类格局的diff。
  4、高低文格局的diff

  上个世纪80年月初,加州年夜学伯克利分校推出BSD版本的Unix时,以为diff的显现了局太复杂,最好到场高低文,便于懂得产生的变化。因而,推出了高低文格局的diff。
  它的利用办法是到场c参数(代表context)。
  $diff-cf1f2
  显现了局以下:
  ***f12012-08-2916:45:41.000000000+0800
  ---f22012-08-2916:45:51.000000000+0800
  ***************
  ***1,7****
  a
  a
  a
  !a
  a
  a
  a
  ---1,7----
  a
  a
  a
  !b
  a
  a
  a
 这个了局分红四个部分。
 第一部分的两行,显现两个文件的基础情形:文件名和工夫信息。
  ***f12012-08-2916:45:41.000000000+0800
  ---f22012-08-2916:45:51.000000000+0800
  "***"暗示变化前的文件,"---"暗示变化后的文件。
  第二部分是15个星号,将文件的基础情形与变化内容支解开。
  ***************
  第三部分显现变化前的文件,即f1。
  ***1,7****
  a
  a
  a
  !a
  a
  a
  a
  这时候不但显现产生变更的第4行,还显现第4行的后面三行和前面三行,因而一共显现7行。以是,后面的"***1,7****"就暗示,从第1行入手下手一连7行。
  别的,文件内容的每行最后面,另有一个标志位。假如为空,暗示该行无变更;假如是叹息号(!),暗示该行有修改;假如是减号(-),暗示该行被删除;假如是加号(+),暗示该举动新增。
  第四部分显现变化后的文件,即f2。
  ---1,7----
  a
  a
  a
  !b
  a
  a
  a
  除变化行(第4行)之外,也是高低文各显现三行,统共显现7行。
  5、兼并格局的diff

  假如两个文件类似度很高,那末高低文格局的diff,将显现大批反复的内容,很华侈空间。1990年,GNUdiff领先推出了"兼并格局"的diff,将f1和f2的高低文兼并在一同显现。
  它的利用办法是到场u参数(代表unified)。
  $diff-uf1f2
  显现了局以下:
  ---f12012-08-2916:45:41.000000000+0800
  +++f22012-08-2916:45:51.000000000+0800
  @@-1,7+1,7@@
  a
  a
  a
  -a
  +b
  a
  a
  a
  它的第一部分,也是文件的基础信息。
  ---f12012-08-2916:45:41.000000000+0800
  +++f22012-08-2916: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行。它将两个文件的高低文,兼并显现在一同,以是叫做"兼并格局"。每行最后面的标记位,空暗示无变化,减号暗示第一个文件删除的行,加号暗示第二个文件新增的行。
  6、git格局的diff

  版本办理体系git,利用的是兼并格局diff的变体。
  $gitdiff
  显现了局以下:
  diff--gita/f1b/f1
  index6f8a38c..449b072100644
  ---a/f1
  +++b/f1
  @@-1,7+1,7@@
  a
  a
  a
  -a
  +b
  a
  a
  a
  第一行暗示了局为git格局的diff。
  diff--gita/f1b/f1
  举行对照的是,a版本的f1(即变化前)和b版本的f1(即变化后)。
  第二行暗示两个版本的git哈希值(index地区的6f8a38c工具,与事情目次地区的449b072工具举行对照),最初的六位数字是工具的形式(一般文件,644权限)。
  index6f8a38c..449b072100644
  第三行暗示举行对照的两个文件。
  ---a/f1
  +++b/f1
  "---"暗示变化前的版本,"+++"暗示变化后的版本。
  前面的行都与官方的兼并格局diff不异。
  @@-1,7+1,7@@
  a
  a
  a
  -a
  +b
  a
  a
  a
  7、浏览质料
  *diff-Wikipedia
  *Howtoreadapatchordiff
  *Howtoworkwithdiffrepresentationingit
常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基的。

小妖女 发表于 2015-1-17 12:44:31

在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。

再见西城 发表于 2015-1-20 19:49:23

一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢。

山那边是海 发表于 2015-1-29 18:49:27

随着实验课程的结束,理论课也该结束了,说实话教OS的这两位老师是我们遇到过的不错的老师(这话放这可能不太恰当).

莫相离 发表于 2015-2-6 03:28:50

未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。

变相怪杰 发表于 2015-2-15 14:11:41

熟悉操作是日常学习Linux中的三大法宝。以下是作者学习Linux的一些个人经验,供参考:

小女巫 发表于 2015-3-4 11:58:18

这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。?

因胸联盟 发表于 2015-3-11 19:31:18

众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。

愤怒的大鸟 发表于 2015-3-19 11:10:50

工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于Linux的书籍有很多不过精品的不多。

不帅 发表于 2015-3-28 00:35:22

在学习的过程中,我们用的是VM虚拟机,开始时真的不真的该怎么去做,特别是我的是命令窗口界面,别人的是图形界面,我都不知道怎么调过来。
页: [1]
查看完整版本: 来讲讲:读懂diff