以前不使用 patch 時,在調試過程中,為了保證不出問題,每個客戶的問題,我都會完整的進行一遍源碼下載,修改,編譯的過程,這不僅使用巨量的時間去下載源碼、編譯,還會占用大量的磁盤空間,尤其是 android 源碼,每個客戶都需要占用大約 400G 左右的空間,十分的占用資源,這裡使用 repo 工具,生成 patch,再使用 patch 打補丁,退回補丁的方式,記錄下自己的修改,減少時間服務器的資源占用。
一、repo status 查看當前代碼狀態
1.1使用 repo status 查看當前代碼狀態
repo status
1.2 由上截圖可以看出,有 5 個目錄下的代碼文件發生了改變
(1)freertos_safetyos/
(2)lk_boot/chipdev/
(3)lk_boot/exdev/
(4)lk_boot/hal/
(5)lk_boot/target/
二、repo diff 查看代碼改動
2.1 使用 repo diff + 目錄,可以查看目錄下的具體修改,比如 1.2 中 5 個路徑都可以。
repo diff freertos_safetyos/
三、生成 patch 文件
3.1 使用 repo diff 結合 >/>> 命令可以把具體修改生成 patch 文件。
repo diff freertos_safetyos/ >> 1.freertos_safetyos.patch
四、patch -p xx.patch 命令打補丁
4.1 把 patch 補丁文件傳輸到補丁中對應的 project 中才能用作打補丁。
4.2 使用 patch 打補丁到 freertos_safety
(1)為了對比,我這裡先去掉 freertos_safety/ 目錄之前的修改,repo status 可以看到已經沒有 freertos_safety/ 了。
repo_status
(2)然後把剛才製作的 1.freertos_safetyos.patch copy 到 freertos_safety/ 目錄中去運行 patch 命令打補丁。
cp 1.freertos_safetyos.patch freertos_safetyos/
cd freertos_safetyos/
patch -p1 < 1.freertos_safetyos.patch
或者使用相對路徑也可以。
patch -p1 < ../1.freertos_safetyos.patch
(3)確認是否打上 patch 補丁
repo status
可以看到,包括 copy 進去的 1.freertos_safetyos.patch 的補丁文件,都被記錄在 repo status 中了。
五、恢復初始代碼
“4.2 使用 patch 打補丁到 freertos_safety” 的(1)章節中,我去掉了之前修改,這是如何做到的呢,請參考如下命令。
5.1 恢復指定目錄的初始代碼
repo forall freertos_safetyos/ -c 'git reset --hard && git clean -fdx'
這裡恢復了 freertos_safetyos/ 的初始代碼,所以如 4.2 (1)中看到的,repo status 中不再有 freertos_safetyos/ 目錄中的記錄了。
5.2 恢復全部目錄下的初始代碼
(1)首先查找並生成所有當前目錄下的差異文件,並生成 patch。
(2)使用 repo forall -vc "git reset --hard" 命令恢復全部目錄下的初始代碼
repo status
repo forall -vc "git reset --hard"
repo status
六、總結
本文基於芯馳 X9E PTG4.3 的工程,使用 repo 工具,生成 patch,再使用 patch 打補丁,退回補丁的方式,記錄下自己的修改,減少時間服務器的資源占用。
七、參考資料
[1]《X9_SDK_用戶手冊_Rev1.7》
芯馳 X9系列相關博文:
《基於芯馳 X9HP PTG4.1 修改 UART10 作為 linux 串口輸出》
《基於芯馳 X9E PTG4.3 添加 PMU CTRLx 的控制驅動》
《基於芯馳 X9M PTG4.3 添加 I2C3, I2C4 資源到 android》
歡迎在博文下方留言評論,我們會及時回復您的問題。
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:好景虛設
更多資訊,請掃碼關注我們!
評論