選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
5 分鐘閱讀時間 (1010 個字)

[GIT] 跨 Repo 取得 commit 資料 (三) - format-patch + am

image

簡介

此系列文章主要使用 Command 的方式來操作,會先介紹一下會使用到的各個 Command 使用方法與功用,再介紹實作方法,此篇為使用 format-patch + am 來跨 Repository 取得 Commit 或 Pull Request (or Merge Request) 的作法。

Command 介紹

這邊預設對 Git 有一定的基礎 (clone、pull、push、log…),故僅介紹此篇主要使用的相關 Command。

format patch

在 GitHub 或是 GitLab 上,其實都可以直接產出 format-patch 此功能產出後的檔案,
這個檔案內容是使用 email 的格式,範例如下:

這個方法翻譯成指令: git format-patch --stdout <start commit SHA> <finish commit SHA> > update.patch

那這邊僅介紹使用 GitHub 與 GitLab 產出的方法,
這兩個網站使用的方法是相同的,以下將以 GitHub 為範例,
那他支援 Commit 或是 Pull Request (Merge Request) 的使用。

假設目前我有一個 Commit 如下畫面:

a61120 commit

這個 Commit 的網址是 https://github.com/yuuuna/sub-project/commit/a61120f0a011bbd51688808e8ba91f2af39dbcd4
那要產出 format-patch 的話,只要在網址最後面增加 .patch 就可以囉!

a61120 patch

Pull Request (Merge Request) 的方法相同,只要在 Pull Request 的頁面網址後面增加 .patch,都會是 email 格式的 Patch 檔案。

那這個檔案可以搭配 am 指令,可以更加方便的匯入修改紀錄。

am

am 的功能為同意一個 Email 格式的 Patch,把這一個 Patch 的 Commit 修改紀錄,放進需要調整的 Repository 裡面,
而這個功能是搭配 format patch 來進行使用。

am 的指令為: git am -3 < <patch file>

那假設目前有一個 Patch 檔案,名稱為 AddIndex.patch

這樣就把 AddIndex.patch 的修改紀錄放至當前的 Repository 裡面囉!

 實作:format-patch + am

這個方法是我最推薦的方法,只要暸解一下每個步驟的功能,可以簡單上手。

流程如下:

  1. 在 GitHub (or GitLab) 上到你想要產出修改紀錄的 Commit 或 Pull Request (or Merge Request) 頁面。
  2. 直接在網址最後方新增 .patch,並下載此頁面的內容為檔案,這裡名稱為 update.patch
  3. 將檔案放至本地要匯入的 Repository 中。(方便等一下指令直接使用此檔案)
  4. 使用 git am -3 < update.patch,這樣就把檔案內的每一個 Commit 的修改紀錄都進去囉!

那現在以案例來實作,目前有兩專案 main-projectsub-project,而 commit 紀錄如下圖:

main-project
sub-project

目前想要在 main-project 的 master 分支新增 sub-projecta61120 Commit 紀錄,
操作如下:

1. 到 GitHub a61120 這一個 Commit 的頁面上。

a61120 commit

2. 直接在網址最後面新增 .patch,然後下載這個頁面為檔案。

a61120 patch

3. 將檔案放進 main-project 裡面。

4. 指令目錄切換到 main-project 專案目錄下:

這樣就完成囉!

假若你同時維護多個相同底層的系統,
此時要修改底層的東西時,又要同步到各個相同底層的系統,
那這個方法會很方便去實現同步這件事,
將修改紀錄產生一個 Patch 檔案,然後再專案底下使用 am 匯入進去,
最後在 Push 至遠端,完成!

愛用瀏覽器自動填入? 小心個資外洩!
[GIT] 跨 Repo 取得 commit 資料 (二) - diff + apply

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/18, 週六

Captcha 圖像