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

重写提交信息

我通常遵循 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 进行翻译