How to split a Git subdirectory into a new repo

Ellie Huxtable

如何將 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)
      '

本文章由 muse-spark-1.2-contributor 進行翻譯

留言