如何将 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重写提交信息
我通常遵循 conventional commits(约定式提交),因此有很多像这样的带作用域的提交:
feat(subdir): do a thing现在 subdir 已经是独立的仓库,这些提交看起来就有点奇怪了。让我们来整理一下!
git filter-repo --message-callback '
return re.sub(b"\(subdir\)\n", b"", message, flags=re.MULTILINE)
'随机一篇博客