Try   HackMD

如何無縫分拆Git Repo?

最近負責把團隊內的 TFS Git 倉庫搬移到 Gitlab 倉庫,並對特定的倉庫做了一次分拆。

專案開發初期為了圖方便,所有東西通通放到同一倉庫,但是經年累月下來隨著專案迭代、人力發展、花式玩法後逐漸付出各種問題,其主要痛點有以下:

  1. 存取權限控管:無法達到最小範圍、按需授權等原則、最大限度保護程式碼外洩可能,現有的大鍋飯模式,是無法滿足達成的。
  2. 空間肥大:會取得很多我不相關的內容,未來CI/CD實作後可能會影響到運作效率。
  3. 衝突:合併程式碼衝突機率逐步增高,且一旦衝突就要需要花費許多時間去解衝突、甚至不小心蓋掉其他人程式碼。

同時也希望倉庫拆分後能同時保留歷史Commit紀錄,以利後續追查與回溯狀況。

前提

  • git 版本要 >= 2.22.0
  • 使用前請先安裝 git-filter-repo 套件,安裝過程相當簡易詳請自行參閱安裝指南
  • 建議重新clone一份新的、乾淨的倉庫

開始分拆與執行步驟

Step 1. Clone要拆分的倉庫

git clone https://github.com/yphs99/Repo-Split-Testing.git

Step 2. 將工作目錄切換到Clone回來的倉資料夾

cd Repo-Split-Testing

Step 3. 從倉庫中的指定欲保存的Order資料夾名稱,並將該資料夾提升為根目錄

git filter-repo --subdirectory-filter 'Order/'

Step 4. 分拆完了!最後觀看與確認分拆結果,無誤後 push 回 Git Repo 上

更多相關命令簡介

本文僅針對本次需求介紹所需用到的指令,若需其他指令建議請觀看 git-filter-repo說明文件,裡面可以看到有更多指令說明與範例。

本文同步發表於CMoney工程部Blog