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

重写提交信息

我平时遵循 Conventional Commits 规范,所以有很多像这样的带作用域的提交:

feat(subdir): do a thing

现在 subdir 已经是一个独立的仓库,这些提交信息看起来就有点别扭了。我们来整理一下!

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

本文章由 muse-spark-1.2-contributor 进行翻译

评论