差异文件(diff)和补丁文件(patch)简介(2)

在继续我们的话题之前,我们当然不能忽略和补丁和差异这个概念相关的最流行的服务:GitHub。从它的名字就能猜想出 GitHub 是基于 Git 的,而且它还围绕着 Git 对分布式开源代码开发模型提供了基于 Web 和 API 的工作流管理。(LCTT 译注:即拉取请求Pull Request)。在 GitHub 上,分享补丁的方式不是像 Linux 内核社区那样通过邮件列表,而是通过创建一个 拉取请求 。当你提交你自己的源代码树的改动时,你能通过创建一个针对软件项目的共享仓库的“拉取请求”来分享你的代码改动(LCTT 译注:即核心开发者维护一个主仓库,开发者去“复刻fork”这个仓库,待各自的提交后再创建针对这个主仓库的拉取请求,所有的拉取请求由主仓库的核心开发者批准后才能合入主代码库。)GitHub 被当今很多活跃的开源社区所采用,如 KubernetesDocker容器网络接口 (CNI)Istio 等等。在 GitHub 的世界里,用户会倾向于使用基于 Web 页面的方式来审核一个拉取请求里的补丁或差异,你也可以直接访问原始的补丁并在命令行上直接使用它们。

该说点干货了

我们前面已经讲了在流行的开源社区里是怎么应用补丁和差异的,现在看看一些例子。

第一个例子包括一个源代码树的两个不同副本,其中一个有代码改动,我们想用 diff 来看看这些改动是什么。这个例子里,我们想看的是“合并格式unified”的补丁,这是现在软件开发世界里最通用的格式。如果想知道更详细参数的用法以及如何生成差异文件,请参考 diff 手册。原始的代码在 sources-orig 目录,而改动后的代码在 sources-fixed 目录。如果要在你的命令行上用“合并格式”来展示补丁,请运行如下命令。(LCTT 译注:参数 -N 代表如果比较的文件不存在,则认为是个空文件, -a 代表将所有文件都作为文本文件对待,-u 代表使用合并格式并输出上下文,-r 代表递归比较目录)

$ diff-Naur sources-orig/ sources-fixed/

……下面是 diff 命令的输出:

diff-Naur sources-orig/officespace/interest.go sources-fixed/officespace/interest.go

--- sources-orig/officespace/interest.go        2018-08-1016:39:11.000000000-0400

+++ sources-fixed/officespace/interest.go       2018-08-1016:39:40.000000000-0400

@@-11,15+11,13@@

   InterestRate float64

 }

+// compute the rounded interest for a transaction

 func computeInterest(acct *Account, t Transaction) float64 {

   interest := t.Amount* t.InterestRate

   roundedInterest := math.Floor(interest*100)/100.0

   remainingInterest := interest - roundedInterest

-  // a little extra..

-  remainingInterest *=1000

-

   // Save the remaining interest into an account we control:

   acct.Balance= acct.Balance+ remainingInterest

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12548.html