patch补丁使用方法 patch补丁怎么用( 二 )


在继续我们的话题之前,我们当然不能忽略和补丁和差异这个概念相关的最流行的服务: GitHub。从它的名字就能猜想出 GitHub 是基于 Git 的,而且它还围绕着 Git 对分布式开源代码开发模型提供了基于 Web 和 API 的工作流管理 。(LCTT 译注:即 拉取请求(Pull Request)) 。在 GitHub 上,分享补丁的方式不是像 Linux 内核社区那样通过邮件列表,而是通过创建一个 拉取请求。当你提交你自己的源代码树的改动时,你能通过创建一个针对软件项目的共享仓库的“拉取请求”来分享你的代码改动(LCTT 译注:即核心开发者维护一个主仓库,开发者去“ 复刻(fork)”这个仓库,待各自的提交后再创建针对这个主仓库的拉取请求,所有的拉取请求由主仓库的核心开发者批准后才能合入主代码库 。)GitHub 被当今很多活跃的开源社区所采用,如 Kubernetes 、 Docker 、 容器网络接口 (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-10 16:39:11.000000000 -0400
+++ sources-fixed/officespace/interest.go 2018-08-10 16: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
最开始几行 diff 命令的输出可以这样解释:三个 — 显示了原来文件的名字;任何在原文件(LCTT 译注:不是源文件)里存在而在新文件里不存在的行将会用前缀 -,用来表示这些行被从源代码里“减去”了 。而 +++ 表示的则相反:在新文件里被加上的行会被放上前缀 +,表示这是在新文件里被“加上”的行 。补丁文件中的每一个补丁“块”(用 @@ 作为前缀的的部分)都有上下文的行号,这能帮助补丁工具(或其它处理器)知道在代码的哪里应用这个补丁块 。你能看到我们已经修改了“Office Space”这部电影里提到的那个函数(移除了三行并加上了一行代码注释),电影里那个有点贪心的工程师可是偷偷的在计算利息的函数里加了点“料”哦 。(LCTT译注:剧情详情请见电影
https://movie.douban.com/subject/1296424/)
如果你想找人来测试你的代码改动,你可以将差异保存到一个补丁里:


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: