精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

差異文件(diff)和補丁文件(patch)簡介

系統 Linux
這篇文章介紹差異文件和補丁文件,以及它們如何在開源項目中使用的例子。

 這篇文章介紹差異文件diff補丁文件patch,以及它們如何在開源項目中使用的例子。

如果你曾有機會在一個使用分布式開發模型的大型代碼庫上工作過,你就應該聽說過類似下面的話,“Sue 剛發過來一個補丁patch”,“Rajiv 正在簽出checking out差異diff”, 可能這些詞(補丁、差異文件)對你而言很陌生,而你確定很想搞懂他們到底指什么。開源軟件對上述提到的名詞有很大的貢獻,作為大型項目從 Apache web 服務器到 Linux 內核的開發模型,“基于補丁文件的開發” 這一模式貫穿了上述項目的始終。實際上,你可能不知道 Apache 的名字就來自“一系列的代碼補丁”(LCTT 譯注:Apache 英文發音和補丁的英文 patch 相似),它們被一一收集起來并針對原來的 NCSA HTTPd server source code 進行了修訂。

你可能認為這只不過是些逸聞,但是一份早期的 Apache 網站的存檔中 聲稱 Apache 的名字就是來自于最早的“補丁”集合;即“打了補丁的APAtCHy”服務器,簡化為 Apache。

好了,言歸正傳,程序員嘴里說的“差異”和“補丁”到底是什么?

首先,在這篇文章里,我們可以認為這兩個術語都指向同一個概念。“diff” 是 ”difference“ 的簡寫;Unix 下的同名工具程序 diff剖析了一個或多個文件之間的“差異”。下面我們會看到 diff 的例子:

一個“補丁”指的是文件之間一系列差異,這些差異能被 Unix 的 diff 程序應用在源代碼樹上。我們能使用 diff 工具來創建“差異”(或“補丁”),然后使用該工具將它們 “打” 在一個沒有這個補丁的同樣的源代碼版本上。此外,(我又要開始跑題說些歷史軼事了……),“補丁” 這個詞真的指在計算機的早期使用打卡機的時候,用來覆蓋在打孔紙帶上來對軟件進行修改的覆蓋紙,那個時代打孔紙帶就是在計算機處理器上運行的程序。下面來自 維基頁面 的這張圖真切的描繪了最初的“打補丁”這個詞的出處:

[[243388]]

現在你對補丁和差異就了一個基本的概念,讓我們來看看軟件開發者是怎么使用這些工具的。如果你還沒有使用過類似于 Gitsubversion 這樣的源代碼版本控制工具的話,我將會一步步展示***的軟件項目是怎么使用它們的。如果你將一個軟件的生命周期看成是一條時間線的話,你就能看見這個軟件的點滴變化,比如在何時源代碼加上了一個功能,在何時源代碼修復了一個功能缺陷。我們稱這些改變的點為“提交commit”,“提交”這個詞被當今***的源代碼版本管理工具 Git 所使用,當你想檢查在一個提交前后的代碼變化的話,(或者在許多個提交之間的代碼變化),你都可以使用工具來觀察文件差異。

如果你同樣在使用 Git 開發軟件的話,你可以在你的本地開發環境做些希望交給別的開發者的提交,以添加到他們的源代碼樹中。為了給別的開發者你的提交,一個方法就是創建一個你本地文件的差異文件,然后將這個“補丁”發送給和你工作在同一個源代碼樹的別的開發者。別的開發者在“打”了你的補丁之后,就能看到在你的代碼變樹上的變化。 

Linux、Git 和 GitHub

這種分享補丁的開發模型正是現今 Linux 內核社區如何處理內核修改提議而采用的模型。如果你有機會瀏覽任何一個主流的 Linux 內核郵件列表 —— 主要是 LKML,也包括 linux-containersfs-develNetdev 等等,你能看到很多開發者會貼出他們想讓其他內核開發者審核、測試或者合入 Linux 官方 Git 代碼樹某個位置的補丁。當然,討論 Git 不在這篇文章范圍之內(Git 是由 Linus Torvalds 開發的源代碼控制系統,它支持分布式開發模型以及允許獨立于主要代碼倉庫的補丁包,這些補丁包能被推送或拉取到不同的源代碼樹上,并遵守這些代碼樹各自的開發流程。)

在繼續我們的話題之前,我們當然不能忽略和補丁和差異這個概念相關的***的服務: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 代表遞歸比較目錄)

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

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

  1. diff -Naur sources-orig/officespace/interest.go sources-fixed/officespace/interest.go
  2. --- sources-orig/officespace/interest.go        2018-08-10 16:39:11.000000000 -0400
  3. +++ sources-fixed/officespace/interest.go       2018-08-10 16:39:40.000000000 -0400
  4. @@ -11,15 +11,13 @@
  5.    InterestRate float64
  6.  }
  7.  
  8. +// compute the rounded interest for a transaction
  9.  func computeInterest(acct *Account, t Transaction) float64 {
  10.  
  11.    interest := t.Amount * t.InterestRate
  12.    roundedInterest := math.Floor(interest*100) / 100.0
  13.    remainingInterest := interest - roundedInterest
  14.  
  15. -  // a little extra..
  16. -  remainingInterest *= 1000
  17. -
  18.    // Save the remaining interest into an account we control:
  19.    acct.Balance = acct.Balance + remainingInterest

最開始幾行 diff 命令的輸出可以這樣解釋:三個 --- 顯示了原來文件的名字;任何在原文件(LCTT 譯注:不是源文件)里存在而在新文件里不存在的行將會用前綴 -,用來表示這些行被從源代碼里“減去”了。而 +++ 表示的則相反:在新文件里被加上的行會被放上前綴 +,表示這是在新文件里被“加上”的行。補丁文件中的每一個補丁“塊”(用 @@ 作為前綴的的部分)都有上下文的行號,這能幫助補丁工具(或其它處理器)知道在代碼的哪里應用這個補丁塊。你能看到我們已經修改了“Office Space”這部電影里提到的那個函數(移除了三行并加上了一行代碼注釋),電影里那個有點貪心的工程師可是偷偷的在計算利息的函數里加了點“料”哦。(LCTT譯注:劇情詳情請見電影 https://movie.douban.com/subject/1296424/)

如果你想找人來測試你的代碼改動,你可以將差異保存到一個補丁里:

  1. $ diff -Naur sources-orig/ sources-fixed/ >myfixes.patch

現在你有補丁 myfixes.patch 了,你能把它分享給別的開發者,他們可以將這個補丁打在他們自己的源代碼樹上從而得到和你一樣的代碼并測試他們。如果一個開發者的當前工作目錄就是他的源代碼樹的根的話,他可以用下面的命令來打補丁:

  1. $ patch -p1 < ../myfixes.patch
  2. patching file officespace/interest.go

現在這個開發者的源代碼樹已經打好補丁并準備好構建和測試文件的修改了。那么如果這個開發者在打補丁之前已經改動過了怎么辦?只要這些改動沒有直接沖突(LCTT 譯注:比如改在同一行上),補丁工具就能自動的合并代碼的改動。例如下面的interest.go 文件,它有其它幾處改動,然后它想打上 myfixes.patch 這個補丁:

  1. $ patch -p1 < ../myfixes.patch
  2. patching file officespace/interest.go
  3. Hunk #1 succeeded at 26 (offset 15 lines).

在這個例子中,補丁警告說代碼改動并不在文件原來的地方而是偏移了 15 行。如果你文件改動的很厲害,補丁可能干脆說找不到要應用的地方,還好補丁程序提供了提供了打開“模糊”匹配的選項(這個選項在文檔里有預置的警告信息,對其講解已經超出了本文的范圍)。

如果你使用 Git 或者 GitHub 的話,你可能不會直接使用補丁或差異。Git 已經內置了這些功能,你能使用這些功能和共享一個源代碼樹的其他開發者交互,拉取或合并代碼。Git 一個比較相近的功能是可以使用 git diff 來對你的本地代碼樹生成全局差異,又或者對你的任意兩次”引用“(可能是一個代表提交的數字,或一個標記或分支的名字,等等)做全局補丁。你甚至能簡單的用管道將 git diff 的輸出到一個文件里(這個文件必須嚴格符合將要被使用它的程序的輸入要求),然后將這個文件交給一個并不使用 Git 的開發者應用到他的代碼上。當然,GitHub 把這些功能放到了 Web 上,你能直接在 Web 頁面上查看一個拉取請求的文件變動。在 Web 上你能看到所展示的合并差異,GitHub 還允許你將這些代碼改動下載為原始的補丁文件。 

總結

好了,你已經學到了”差異“和”補丁“是什么,以及在 Unix/Linux 上怎么使用命令行工具和它們交互。除非你還在像 Linux 內核開發這樣的項目中工作而使用完全基于補丁文件的開發方式,你應該會主要通過你的源代碼控制系統(如 Git)來使用補丁。但熟悉像 GitHub 這樣的高級別工具的技術背景和技術底層對你的工作也是大有裨益的。誰知道會不會有一天你需要和一個來自 Linux 世界郵件列表的補丁包打交道呢?

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-12-02 08:47:40

LinuxLinux命令

2021-12-23 15:23:42

diffpatchLinux

2021-05-06 16:35:12

網絡安全網絡安全編程文件補丁

2010-03-18 16:38:39

Linux命令

2010-03-09 17:57:46

2010-01-12 11:37:06

Linux常見文件

2010-10-21 16:33:55

sql server系

2012-09-12 14:40:19

Lustre文件系統

2009-06-29 09:57:05

Unix

2010-01-06 11:24:27

Linux命令

2023-12-20 22:04:17

Linux二進制文件

2025-08-04 09:42:42

2009-08-12 16:44:13

.NET文件類型

2010-04-30 15:51:48

Unix系統

2010-04-29 10:11:17

Unix系統

2010-04-20 14:10:11

Unix操作系統

2020-07-09 08:09:21

Linuxdiff命令

2025-05-12 10:15:00

Linuxdiff系統

2012-09-19 13:43:13

OpenAFS分布式文件系統

2012-08-31 16:04:11

HDFS分布式文件系統
點贊
收藏

51CTO技術棧公眾號

另类图片综合电影| 午夜成人鲁丝片午夜精品| 国产精品一区二区av交换| 日本道在线观看一区二区| 五月天国产一区| 国产色综合视频| 亚洲黄色影片| 中文字幕欧美专区| 不许穿内裤随时挨c调教h苏绵| 6699嫩草久久久精品影院| 国产午夜亚洲精品理论片色戒| 成人国产精品日本在线| 国产精品自拍视频一区| 成人羞羞网站| 亚洲成成品网站| 色乱码一区二区三区在线| 国产在线xxx| 亚洲国产精品精华液2区45| 成人免费视频观看视频| 看黄色一级大片| 激情久久中文字幕| 日韩中文字幕视频| av在线网站观看| 成年永久一区二区三区免费视频 | 婷婷丁香综合网| 国产精品对白久久久久粗| 欧美性感一区二区三区| 成人免费观看cn| 福利视频在线| 国产欧美精品一区| 久久国产一区| 精品人妻一区二区三区三区四区 | 人妻va精品va欧美va| 久久成人av少妇免费| 国产91色在线免费| 中文字幕亚洲精品在线| 欧美精品偷拍| www高清在线视频日韩欧美| 免费观看av网站| 另类尿喷潮videofree| 91精品国产一区二区三区| 黄色手机在线视频| 亚洲成av在线| 日韩欧美一区二区三区久久| 性欧美大战久久久久久久| 国产视频在线播放| 亚洲欧洲国产日本综合| 日韩欧美精品久久| 国产尤物视频在线| xfplay精品久久| 久久99国产精品| 神马午夜一区二区| 成人av网站免费观看| 国产精品高清一区二区三区| 精品久久久久中文慕人妻| 黑人精品欧美一区二区蜜桃| 国产精品一久久香蕉国产线看观看| 青草视频在线观看免费| 久久国产一二区| 欧美一级淫片播放口| 国产女同在线观看| 午夜一级久久| 日韩免费在线看| 中文字幕第315页| 免费高清成人在线| 国产一区红桃视频| 99在线小视频| 成人三级在线视频| 美乳视频一区二区| 国产大片在线免费观看| 国产精品久久久久影院老司| 国产精品jizz在线观看老狼| 国产一二区在线| 亚洲一区二区三区三| 大西瓜av在线| 中文在线а√在线8| 色香蕉成人二区免费| 色一情一乱一伦一区二区三区日本| 久久99久久99精品免观看软件| 欧美日韩一区二区三区在线| 午夜激情影院在线观看| 香蕉大人久久国产成人av| 亚洲国产欧美一区二区三区同亚洲| 无码国产69精品久久久久网站| 亚洲人成精品久久久| 中文字幕精品一区久久久久| 99久久99久久精品国产| 亚洲激情女人| 91a在线视频| 中文字幕在线观看视频一区| 国产一区二区h| 国产一区在线免费| 99re热久久这里只有精品34| 一区二区三区在线影院| 欧美三级午夜理伦三级| 国产精品一区二区三区www| 亚洲精品久久久一区二区三区| 欧美特级黄色录像| 中文字幕免费精品| 欧美在线不卡区| 91麻豆国产在线| 不卡的av电影在线观看| 亚洲成人一区二区三区| 国产精品一品| 在线视频国内自拍亚洲视频| 波多野吉衣在线视频| 自拍欧美一区| 免费91在线视频| 精品国产xxx| 国产乱码精品一区二区三区五月婷| 精品在线视频一区二区| 激情成人四房播| 色香蕉成人二区免费| 亚洲欧洲国产视频| 日韩电影一区| 日本成人激情视频| 狠狠躁夜夜躁av无码中文幕| 国产精品三级在线观看| 欧美 日韩 国产 高清| 激情不卡一区二区三区视频在线 | 69xxx免费视频| 日韩1区在线| 青青久久av北条麻妃海外网| 99热这里只有精品5| 国产日产精品1区| 国产欧美精品aaaaaa片| 激情久久99| 亚洲欧洲免费视频| 日本学生初尝黑人巨免费视频| 蜜臀av国产精品久久久久| 麻豆成人小视频| 17videosex性欧美| 亚洲白虎美女被爆操| 亚洲天堂黄色片| 蜜桃视频一区二区三区 | 亚洲精品一区二区三区蜜桃| 中文字幕 久热精品 视频在线| 真人抽搐一进一出视频| 疯狂欧洲av久久成人av电影| 日韩在线观看免费全集电视剧网站 | 91综合久久爱com| 久久中文字幕在线视频| 中文字幕一区2区3区| 国产亚洲短视频| 欧美精品色婷婷五月综合| 国产精品xxx在线观看| 欧美成人性色生活仑片| 国产女人爽到高潮a毛片| 国产精品国产三级国产aⅴ无密码| 日韩精品视频久久| 久久99精品久久久久久园产越南| 欧美尤物巨大精品爽| 亚洲欧美丝袜中文综合| 欧美日韩中文字幕| 亚洲熟妇一区二区三区| 久久成人国产| 亚洲精品成人自拍| 欧美亚洲黄色| 久久躁日日躁aaaaxxxx| 国产成人三级一区二区在线观看一| 亚洲免费伊人电影| 少妇熟女视频一区二区三区| 国产精品大片| 国外成人免费视频| 毛片无码国产| 一区二区成人精品| 97国产成人无码精品久久久| 亚洲欧美日韩小说| 国产精品亚洲一区二区无码| 一区二区三区四区五区精品视频| 精品无码久久久久国产| 日韩欧美看国产| 自拍偷拍亚洲区| 精品国产乱码久久久久久蜜臀网站| 亚洲另类在线视频| 粉嫩av懂色av蜜臀av分享| 免费在线亚洲| 亚洲一区二区三区乱码 | 国产精品日韩一区二区三区| 久草免费在线视频| 国产亚洲一级高清| 国产精品无码一区二区桃花视频 | 亚洲精品毛片| 九九综合九九综合| 牛牛热在线视频| 欧美精品九九99久久| 国产在线免费视频| 国产欧美一区二区三区网站| 日本精品一区在线| 一区二区三区福利| 中文字幕人成一区| 成人福利一区| 国产精品视频网| 国产探花在线观看| 中文字幕精品国产| 黄色av一区二区三区| 欧美在线高清视频| 黄网站免费在线| 国产女人18毛片水真多成人如厕| 欧美性猛交乱大交| 爽好久久久欧美精品| 99久热在线精品视频| 欧美极品在线观看| 国产不卡一区二区在线观看| 九九九伊在线综合永久| 久久人91精品久久久久久不卡| 97人人在线| 日韩av有码在线| 国产黄色一区二区| 欧美色图在线观看| 国产无套丰满白嫩对白| 亚洲同性同志一二三专区| 日本性高潮视频| 91蜜桃在线观看| 师生出轨h灌满了1v1| 蜜臀a∨国产成人精品| 无码人妻h动漫| 国精品一区二区三区| 黄频视频在线观看| 精品国产乱码| 欧美二区在线| 果冻天美麻豆一区二区国产| 91|九色|视频| 成人污版视频| 国产精品偷伦视频免费观看国产| 小视频免费在线观看| 欧美激情二区三区| 91在线中文| 俺去亚洲欧洲欧美日韩| 国产对白叫床清晰在线播放| 日韩va亚洲va欧洲va国产| www.天堂av.com| 欧美一级精品在线| 国产精品免费无遮挡| 欧美日韩精品一二三区| 中文区中文字幕免费看| 色哟哟一区二区三区| 中文字幕国产在线观看| 精品久久香蕉国产线看观看亚洲 | 久草中文在线观看| 北条麻妃在线一区二区| 77导航福利在线| 中文字幕在线看视频国产欧美在线看完整 | 裤袜国产欧美精品一区| 2019中文字幕全在线观看| 在线网址91| 欧美大秀在线观看| av岛国在线| 91chinesevideo永久地址| 草草在线视频| 欧美在线不卡区| 激情开心成人网| 国产欧美日韩专区发布| 伊人久久大香| 亚洲最大的网站| 国产精东传媒成人av电影| 国产精品久久久一区二区三区| 豆花视频一区二区| 精品国产乱码久久久久久88av| 日本欧美韩国国产| 日本一区二区三区四区高清视频| 精品久久影视| 免费看av软件| 亚洲一级黄色| 国产免费成人在线| 日本中文一区二区三区| 免费成年人高清视频| 国产精品亚洲第一区在线暖暖韩国| 被黑人猛躁10次高潮视频| 成人国产一区二区三区精品| 熟女少妇一区二区三区| 国产精品久久久久天堂| 国产亚洲精品成人| 欧美视频一二三| 在线观看国产精品入口男同| 日韩欧美中文一区二区| 天堂av在线免费观看| 日韩在线视频中文字幕| 视频在线这里都是精品| 91成人在线视频| 天堂综合在线播放| 国产女人水真多18毛片18精品| 国产日产精品一区二区三区四区的观看方式 | 成人不卡免费视频| jizz一区二区| 免费看91的网站| 亚洲一区二区视频在线观看| 中文字幕精品无码一区二区| 欧美日韩国产123区| 人妻无码一区二区三区久久99| 亚洲午夜色婷婷在线| 日本高清在线观看| 国产成人a亚洲精品| 涩爱av色老久久精品偷偷鲁| 久久青青草原一区二区| 1024精品久久久久久久久| 久色视频在线播放| 国内精品久久久久影院薰衣草| 性欧美丰满熟妇xxxx性久久久| 国产精品三级视频| 国产精品第9页| 91精品欧美一区二区三区综合在| 日韩在线无毛| 久国内精品在线| 免费视频观看成人| 精品国产乱码久久久久软件| 天天影视欧美综合在线观看| 日韩一级在线免费观看| 国产成人综合在线| 国产在线免费av| 欧美性69xxxx肥| 亚洲免费成人在线| 久久色在线播放| 色综合一本到久久亚洲91| 国产亚洲二区| 中文字幕一区二区三区久久网站 | 国产第100页| 4438x亚洲最大成人网| 国产视频第一区| 韩国一区二区电影| 亚洲精品午夜| 在线观看18视频网站| 欧美aⅴ一区二区三区视频| 好吊一区二区三区视频| 亚洲一区免费视频| 国产喷水吹潮视频www| 在线观看视频亚洲| 欧美性xxx| 精品国产一区二区三区四区vr| 欧美激情aⅴ一区二区三区| 九九精品久久久| 国产精品视频一二三区 | 欧美一区永久视频免费观看| 在线免费观看的av网站| 国产精品激情av在线播放| 自拍偷拍一区| 黄色网页免费在线观看| av午夜一区麻豆| 日韩高清精品免费观看| 精品国产91亚洲一区二区三区婷婷| 污视频在线免费观看网站| 亚洲自拍小视频免费观看| 亚洲欧美综合国产精品一区| 黄色一级片免费播放| 亚洲免费在线观看| 国产99对白在线播放| 欧美成aaa人片免费看| 国产精品一区三区在线观看| 在线精品日韩| 国产一区二区三区香蕉 | 欧美网站在线观看| 涩涩视频在线观看免费| 4388成人网| 欧美女优在线视频| 青青在线视频免费| 中文字幕av在线一区二区三区| 中文字幕人妻色偷偷久久| 日韩视频在线观看免费| 试看120秒一区二区三区| 黄色三级中文字幕| av资源站一区| 天天爽夜夜爽人人爽| 中文综合在线观看| 精品一区二区三区视频在线播放| 国产黄色激情视频| 99精品欧美一区二区蜜桃免费| 成人午夜视频在线播放| 永久免费精品影视网站| 97久久中文字幕| 91九色丨porny丨国产jk| 久久亚洲综合色一区二区三区| 亚洲永久精品一区| 操日韩av在线电影| 老司机aⅴ在线精品导航| 北条麻妃在线视频| 综合av第一页| 免费国产精品视频| 国产精品久久久久av| 久久精品影视| 天堂www中文在线资源| 色8久久精品久久久久久蜜| 麻豆传媒在线观看| 久久精品国产美女| 久久黄色级2电影| 国产真人真事毛片| 亚洲最新av在线网站| 7m精品国产导航在线| 日本女优爱爱视频| 亚洲综合在线第一页| 国产在线视频网站| 成人av蜜桃| 欧美aaa在线| 日韩精品视频免费看| 神马久久久久久| 日韩美脚连裤袜丝袜在线| 久久久久久久久久久久久久久国产| 欧美日韩免费看| www在线观看播放免费视频日本| 久久久久成人精品免费播放动漫| 精品一区二区三区免费|