如何將 Git 子目錄拆分成新的儲存庫
原文由 Ellie Huxtable 于 發布,訂閱此部落格
首先,請安裝 git-filter-repo。這是一個沒有任何相依套件的 Python 腳本。
安裝非常簡單,只要把腳本放到 PATH 中的某個位置就行。以我為例:
curl "https://raw.githubusercontent.com/newren/git-filter-repo/main/git-filter-repo" -o ~/.local/bin/git-filter-path要特別注意的是,git-filter-repo 會用子目錄中的檔案來取代儲存庫中的所有其他檔案。為了避免資料遺失,請在全新的儲存庫複本上操作。
假設我們的儲存庫看起來像這樣
🦄 ls -l
.rw-r--r-- ellie staff 0 B Mon Jul 29 14:13:39 2024 LICENSE
.rw-r--r-- ellie staff 0 B Mon Jul 29 14:13:34 2024 README.md
drwxr-xr-x ellie staff 64 B Mon Jul 29 14:13:35 2024 src/
drwxr-xr-x ellie staff 64 B Mon Jul 29 14:13:43 2024 subdir/而我們想把 subdir 裡的內容獨立成自己的儲存庫。
我們只要執行
git filter-repo --subdirectory-filter subdir重寫 commit 訊息
我平常都遵循 Conventional Commits 規範,所以有很多像這樣帶有範圍標註的 commit
feat(subdir): do a thing現在 subdir 已經獨立成自己的儲存庫,這些 commit 看起來就有點奇怪。來整理一下吧!
git filter-repo --message-callback '
return re.sub(b"\(subdir\)\n", b"", message, flags=re.MULTILINE)
'隨機一篇部落格
留言
登入後參與討論