如何將 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)
'隨機一篇部落格