How to split a Git subdirectory into a new repo

Ellie Huxtable

如何將 Git 子目錄拆分為新的儲存庫

首先,請安裝 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 會將儲存庫中的所有其他檔案替換為 subdir 中的檔案。你應該在儲存庫的全新複本上操作,以免遺失資料。

假設我們的儲存庫看起來如下:

🦄 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(約定式提交),所以有許多像這樣帶有範圍的提交,例如:

feat(subdir): do a thing

現在 subdir 已經是獨立的儲存庫,那些提交看起來就有點奇怪。讓我們來整理一下吧!

git filter-repo --message-callback '
      return re.sub(b"\(subdir\)\n", b"", message, flags=re.MULTILINE)
      '

原文由 Ellie Huxtable 發布

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