Linux - 管理 patch 的工具 : quilt
- 1. 使用 quilt
- 需要在其他開發者的 source code 增加程式碼 (例 : linux kernel, hostapd ...)
因爲無法直接使用 git 的方式 push code,
所以使用 patch 的方式增加需要修改的 code,
而 quilt 就是管理和產生 patch 的工具
- quilt 的操作跟 stack 一樣,
quilt push -> 把一個 patch 的內容放到 source code
quilt pop -> 讓 source code 的內容回復還沒有上一個 patch 的狀態
- 2. 安裝 quilt
- sudo apt-get install quilt
- 3. 設定 quilt 產生 patch 的格式
- [1] cat > ~/.quiltrc <<EOF
- [2] QUILT_DIFF_ARGS="--no-timestamps--no-index -pab --color=auto“
- [3] QUILT_REFRESH_ARGS="--no-timestamps--no-index -pab"
- [4] QUILT_PATCH_OPTS="--unified"
- [5] QUILT_DIFF_OPTS="-p"
- [6] QUILT_SERIES_ARGS="--color=auto"
- [7] EDITOR="vim", EDITOR="nano"
- 修改 patch 的編輯器
(這行不一定要加, 產生patch後, 再使用自己習慣的編輯器去修改)
- [8] EOF
- 4. 產生沒有任何 patch 的原始 hostapd source code
- make package/hostapd/{clean,prepare} V=s QUILT=1
- 在 clean 之前, 如果有修改其他 hostapd 的檔案, 要記得備份,
否則指令執行後, 所有改過且沒有 push 到 remote server 的內容都會不見,
檔案會回到 local server 最新的 commit 內容
- 5. 進入到編譯的目錄
- cd build_dir/target-*/hostapd-*
- 查詢 patch
- 查詢目前有哪些 patch
- quilt series
- 以下三種顏色是在 vim 顯示的, 可能會根據不同的編譯器有不同的結果
綠色的字 : 已經 apply 的 patch
橘色的字 : 已經 apply 的 patch, 且是目前最新的 patch
白色的字 : 還沒 apply 的 patch
- 所有的 patch 名稱跟 patch 的先後順序會記錄在 patches/series 的檔案裡
- 查詢已經 apply 的 patch
- 查詢還沒 apply 的 patch
- 查詢下一個要 apply 的 patch
- 查詢目前 apply 最新的 patch
- 查詢 patch 包含哪些檔案
- quilt files
- 只會查詢目前 apply 最新的 patch修改哪些檔案,
不會顯示前面其他 patch 修改的檔案
- 如果沒有先 quilt push, quilt files 會出現 "No patches applied"
- 套用(push)/還原(pop) patch
- 假設 patches/series 的內容依序有以下三個 patch
112-test.patch
113-test.patch
114-test.patch
- quilt push 及 quilt pop 的指令結束後, 都會顯示 “Now at patch ... “
但如果現在沒有 apply 任何 patch, 就會顯示 ” No patches applied “
- quilt push -a
- quilt push test_patch_name.patch
- apply 特定的 patch
- 如果是 quilt push 113-test.patch,
就只會 apply 113-test.patch (包含)這個之前的所有 patch
- quilt push
- 一次只會 apply 一個 patch, 會從最前面的 patch 開始 apply
- 第一次 quilt push -> 會 apply 112-test.patch
第二次 quilt push -> 會 apply 113-test.patch
- quilt pop -a
- undo 所有的 patch
- 會一次撤銷上面三個 patch
指令結束後, 會看到 ” No patches applied “
- quilt pop 112-test.patch
- 會將 patch 現在的位置回到特定的 patch
- [1] 如果先執行 quilt push -a, 結果如下 :
- 112-test.patch113-test.patch114-test.patch
- [2] 如果再執行 quilt pop 112-test.patch,
會撤銷 112-test.patch 之後所有的 patch,
但會保留 112-test.patch 的內容, 結果如下 :
- quilt pop
- 一次只撤銷一個 patch, 會從最後面的 patch 開始撤銷
- [1] 如果先執行三次 quilt push, 結果如下 :
- 112-test.patch
113-test.patch
114-test.patch
- [2] 如果再執行 quilt pop, 會撤銷 114-test.patch, 結果如下 :
- 112-test.patch
113-test.patch
- [3] 如果再執行 quilt pop, 會撤銷 113-test.patch, 結果如下 :
- 新增 patch
- quilt new 115-new-test.patch
- 移除 patch
- quilt delete 115-new-test.patch
- 新增檔案
- 修改檔案
- quilt edit quilt_add_02.c
- 會先做 quilt add quilt_add_02.c,
再用一開始設定的 editor 開啓 quilt_add_02.c 這個檔案
- 移除檔案
- quilt remove quilt_add_01.c
- 更新或產生 patch
- ref
- http://www.fmddlmyy.cn/text28.html
- http://bruce-wang.blogspot.tw/2007/12/patch-quilt-mkdir-patches-1.html
- http://wen00072.github.io/blog/2014/06/08/study-on-the-quilt/
- http://www.cnblogs.com/xuyh/p/6278937.html
- http://linux.die.net/man/1/quilt
沒有留言:
張貼留言