精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

97免费观看视频| b站大片免费直播| 蜜臀av在线| 99久久99久久久精品齐齐| 欧美性受xxxx白人性爽| 精品成人无码一区二区三区| 91精品国产色综合久久不卡粉嫩| 夜夜嗨av一区二区三区中文字幕 | 91猫先生在线| 91ph在线| av成人免费在线| 国产精品在线看| 国产一级一片免费播放| 欧美色就是色| 亚洲第一福利在线观看| 超碰av在线免费观看| 色yeye免费人成网站在线观看| 91论坛在线播放| 成人激情视频网| 4438国产精品一区二区| 在线看片不卡| 国产一区二区三区网站| 91精品国产高清91久久久久久| 亚洲第一二三四区| 亚洲一区在线看| 亚洲狠狠婷婷综合久久久| 狠狠躁夜夜躁av无码中文幕| 美女网站色91| 国产成人精品久久久| 激情五月婷婷在线| 日韩欧美自拍| 亚洲欧美日韩直播| 一本加勒比波多野结衣| 国语精品视频| 欧美日韩高清一区二区| 久章草在线视频| 超清av在线| 亚洲欧美日韩国产成人精品影院| 婷婷久久伊人| 每日更新在线观看av| 国产91丝袜在线18| 亚洲自拍另类欧美丝袜| 911美女片黄在线观看游戏| 国产日韩一区二区三区在线| 欧美日韩国产成人在线| 欧美三级黄色大片| 日韩久久精品网| 在线视频日韩精品| 波多野结衣片子| 尤物tv在线精品| 日韩精品在线看| 亚洲成人av免费在线观看| 成人免费直播在线| 精品国产一区二区三区忘忧草| 午夜不卡福利视频| 99久久99九九99九九九| 欧美丰满嫩嫩电影| 日本中文字幕二区| gogo大尺度成人免费视频| 欧美群妇大交群中文字幕| 一级特黄性色生活片| 日本国产欧美| 欧美电影影音先锋| 亚洲制服在线观看| 亚洲欧美日本国产| 精品国产成人在线影院| 99久久免费看精品国产一区| 网红女主播少妇精品视频| 亚洲国产精品资源| 国产精品三级在线观看无码| 风间由美一区二区av101| 亚洲第一中文字幕在线观看| 一起草在线视频| 蜜乳av综合| 中文字幕亚洲欧美| 国产免费久久久久| 一区视频在线看| 欧美一级淫片videoshd| 国产精品尤物视频| 精品综合久久久久久8888| 91亚洲精品丁香在线观看| 国产 欧美 精品| 26uuu久久天堂性欧美| 日本不卡二区| a级在线观看| 亚洲自拍偷拍综合| 91视频最新入口| 欧美成人aaa| 精品久久久久久久久久久久久久久久久 | 亚洲成人av在线播放| 国产精品伦子伦| 日韩精品免费一区二区三区| 欧美剧在线观看| 九九热精品视频在线| 麻豆国产91在线播放| 草莓视频一区| 成人午夜影视| 亚洲国产成人va在线观看天堂| 日韩一级在线免费观看| www.成人在线.com| 精品一区二区电影| 色婷婷在线视频观看| 蜜桃av一区| 成人欧美在线视频| 亚洲人妻一区二区三区| 136国产福利精品导航| 欧美视频在线播放一区| 91精品在线免费视频| 精品调教chinesegay| 五月天婷婷色综合| 久久精品观看| 国产精品一区在线播放| 午夜精品一区| 日韩欧美aaa| 麻豆av免费看| 欧美成人自拍| 热久久这里只有| www黄色在线观看| 国产精品美女www爽爽爽| 97国产在线播放| 深夜福利一区二区三区| 伊人青青综合网站| 91精品国产乱码在线观看| 韩国成人福利片在线播放| 欧美视频观看一区| av影片在线| 日韩精品在线一区| 日本成人精品视频| 日日夜夜一区二区| 精品久久久久久乱码天堂| av在线free| 欧美日韩夫妻久久| 快灬快灬一下爽蜜桃在线观看| 亚洲黄色视屏| 国产乱人伦精品一区二区| 久久77777| 欧美巨大另类极品videosbest| 手机免费看av| 欧美专区一区二区三区| 精品毛片久久久久久| a级片在线免费| 日韩欧美的一区| 欧美日韩亚洲国产另类| 国内精品久久久久影院薰衣草| 日韩中文一区二区三区| 欧美片第1页| 亚洲免费电影一区| 日本三级黄色大片| 不卡的av在线播放| 免费不卡av在线| 精品欧美午夜寂寞影院| 久久久久日韩精品久久久男男| 亚洲黄色在线免费观看| 亚洲一区欧美一区| 特级特黄刘亦菲aaa级| 亚洲视频碰碰| 久久精品99久久| 欧美韩国亚洲| 色yeye香蕉凹凸一区二区av| 最近中文字幕免费观看| 国产精品美女久久久久久2018 | 欧美一级视频免费观看| 99精品欧美一区二区三区综合在线| 夜夜添无码一区二区三区| 嫩草国产精品入口| 日本91av在线播放| av成人手机在线| 欧美精品第一页| 成熟的女同志hd| eeuss影院一区二区三区| 精品无码一区二区三区在线| 亚洲专区视频| 91精品久久久久久久久久| dj大片免费在线观看| 欧美精品一区视频| 毛片在线免费视频| 国产精品日日摸夜夜摸av| 在线视频日韩欧美| 欧美日韩99| 欧美日韩精品久久| 四虎地址8848精品| 久久久久五月天| 搞黄视频在线观看| 日韩一级免费一区| 韩国av中文字幕| 亚洲日本欧美天堂| xxxx黄色片| 蜜臀av一级做a爰片久久| 奇米777四色影视在线看| 啪啪激情综合网| 国产综合在线观看视频| 久久影院午夜精品| xvideos成人免费中文版| 乱色精品无码一区二区国产盗| 色av综合在线| 天天干中文字幕| 国产午夜亚洲精品不卡| 青青青草视频在线| 国产亚洲精久久久久久| av在线免费看片| 在线视频日韩| 伊人久久av导航| 加勒比视频一区| 国产女精品视频网站免费| heyzo在线| 日韩在线视频网| 欧美熟妇另类久久久久久不卡| 欧美亚洲一区三区| 精品无码人妻一区二区三区品| 久久久精品天堂| 久久久久久久久久久久国产精品| 久久蜜桃精品| 国产乱淫av片杨贵妃| 久久激情电影| 精品蜜桃传媒| 9999久久久久| 成人网在线免费观看| free欧美| 97在线视频免费观看| 国产理论在线观看| 伊人成人开心激情综合网| 天天干免费视频| 欧美一级黄色录像| 国产又粗又猛又黄又爽无遮挡| 日韩欧美在线第一页| 国产系列精品av| 亚洲精品视频自拍| 天天鲁一鲁摸一摸爽一爽| 国产午夜精品一区二区三区视频| 中文字幕第3页| 国产成人精品免费视频网站| 日本一二区免费| 蓝色福利精品导航| 污污视频网站免费观看| 销魂美女一区二区三区视频在线| 精品视频在线观看一区| 欧美另类视频| 日韩精品一区二区三区电影| 91综合在线| 一区二区三区av在线| 色无极亚洲影院| 亚洲国产婷婷香蕉久久久久久99| 国产精品片aa在线观看| 欧美不卡在线一区二区三区| 午夜先锋成人动漫在线| 精品一区二区日本| 日韩av影院| 欧美成人综合一区| 精品国产91| 亚洲一区二区三区精品动漫| 日韩欧美一区二区三区免费看| 亚洲欧美电影在线观看| 99久久www免费| 国产又黄又爽免费视频| 66视频精品| 日韩精品一区二区在线视频| 欧美日韩福利| 国产成人无码a区在线观看视频| 一本久道久久综合狠狠爱| 鲁一鲁一鲁一鲁一色| 香蕉成人久久| 麻豆一区二区三区视频| 麻豆freexxxx性91精品| 亚洲欧美日韩精品一区| 国产精品白丝av| 能看毛片的网站| 99久久伊人精品| 97人妻人人揉人人躁人人| 国产精品水嫩水嫩| av成人免费网站| 亚洲午夜影视影院在线观看| 欧美日韩乱国产| 欧美性淫爽ww久久久久无| 国产精品区在线观看| 欧美mv日韩mv国产网站app| 女人18毛片水真多18精品| 亚洲精品综合精品自拍| 波多野结衣在线网站| 久久影视电视剧免费网站清宫辞电视 | 精品小视频在线| 成人福利在线| 欧美成人午夜激情视频| 最新中文字幕在线播放| 国产精品一区二区久久国产| 一区二区亚洲视频| 欧美精品在线一区| 天天久久综合| 日本午夜激情视频| 免费精品99久久国产综合精品| 天天色天天综合网| 99re8在线精品视频免费播放| 极品人妻videosss人妻| 亚洲一区免费视频| 亚洲中文一区二区| 欧美不卡一区二区三区四区| 精品视频一二三| 欧美激情成人在线视频| 亚洲一区二区三区四区| 古典武侠综合av第一页| 欧美一区二区三区高清视频| 女人床在线观看| 久久精品二区三区| 亚洲女则毛耸耸bbw| 欧美激情一区二区三区四区 | 欧美日韩视频| 男人舔女人下面高潮视频| 国产高清久久久久| gv天堂gv无码男同在线观看| 亚洲地区一二三色| 国产又大又长又粗| 亚洲人成网站999久久久综合| 色帝国亚洲欧美在线| 国产乱人伦真实精品视频| 精品亚洲自拍| 91精品国产吴梦梦| 蜜桃一区二区三区在线观看| 亚洲天堂成人av| 一区二区三区四区蜜桃| 一二三四区在线| 亚洲人高潮女人毛茸茸| 91资源在线观看| 91成人伦理在线电影| 欧美激情偷拍自拍| 国产成人精品无码播放| 99麻豆久久久国产精品免费| 国产在线视频你懂的| 69成人精品免费视频| 国产高清在线观看| 欧美尤物巨大精品爽| 国产亚洲精品美女久久| 亚洲区成人777777精品| 久久www免费人成看片高清| 亚洲第一综合网| 欧美日韩美女在线| 熟妇人妻av无码一区二区三区 | 国产免费不卡| 国产一区二区三区色淫影院| 欧美日韩1区| 91亚洲一线产区二线产区| 亚洲人成网站色在线观看| 国产理论片在线观看| 日韩在线观看免费全集电视剧网站| 日韩和的一区二在线| 奇米影视首页 狠狠色丁香婷婷久久综合| 亚洲国产黄色| 少妇一级淫片免费放播放| 亚洲电影在线播放| 手机在线精品视频| 欧美亚洲视频在线看网址| 色橹橹欧美在线观看视频高清| 大j8黑人w巨大888a片| 久久人人超碰精品| 精品成人无码久久久久久| 在线观看久久久久久| 久久精品国产精品亚洲毛片| 亚洲免费不卡| 激情综合五月婷婷| 久久国产在线视频| 亚洲精品一线二线三线| 男人的天堂免费在线视频| 久久综合中文色婷婷| 久久婷婷久久| 又色又爽的视频| 欧美一区二区三区四区高清| 黄网在线免费看| 蜜桃av色综合| 青青草97国产精品免费观看| 日韩欧美在线视频播放| 日韩一级免费一区| 极品在线视频| 日韩免费三级| 国产在线国偷精品免费看| 久久综合综合久久| 亚洲精品一区av在线播放| 国产一区二区色噜噜| 成人一区二区av| 91社区在线播放| 欧美性受xxx黑人xyx性爽| 成年人精品视频| 久久中文字幕导航| 欧美三级理论片| 亚洲精品国产精华液| 日本电影一区二区在线观看| 国产免费一区二区三区在线能观看| 欧美三区美女| av电影在线不卡| 日韩一区二区不卡| 成人勉费视频| 国产女人18毛片| 91美女片黄在线观看| 国产精品视频无码| 97精品视频在线播放| 国产一区二区三区四区五区传媒| 国产免费中文字幕| 午夜精品久久一牛影视| 亚洲精品承认| 美国av一区二区三区| 国产乱子轮精品视频| 无码人妻av一区二区三区波多野| 欧美成人性生活|