gpt4 book ai didi

git - 使用 git-filter-branch 提取多个目录

转载 作者:IT王子 更新时间:2023-10-29 01:14:30 25 4
gpt4 key购买 nike

我有一个很大的存储库,目前在顶级子文件夹中包含多个项目,比如 /a/b/c/d

现在我想将该存储库分成两个不同的存储库:一个包含 /a/b,另一个包含 /c/d

我知道 git filter-branch --subdirectory-filter,它非常适合提取单个目录,但它似乎不能一次提取多个目录。

我也知道 git filter-branch --prune-empty --tree-filter,它允许我删除所有内容,但两个想要的目录。这感觉不完全正确,因为我必须手动指定所有可能存在的顶层目录。

有没有更好的方法从一个大仓库中提取两个目录?

PS:当然,使用 git filter-branch 以外的任何好的解决方案都可以。 ;)

最佳答案

使用

git filter-branch -f --prune-empty --tree-filter 'bash preserve-only.sh a b' -- --all

preserve-only.sh 是:

IFS=':'
GLOBIGNORE="$*"
rm -rf *

这应该从所有分支的所有提交中删除除 ab 之外的所有内容,这应该与完全提取给定目录相同。

要完成实际拆分,您可以使用像 rm -rf a b 这样的过滤器来获取第一次运行时未提取的所有更改。


更新:在尝试使用 --index-filter 加快速度时,我找到了一个更简单的解决方案:

git filter-branch -f --prune-empty --index-filter \
'git rm --cached -r -q -- . ; git reset -q $GIT_COMMIT -- a b' -- --all

这只是删除所有内容,然后恢复给定的目录。

关于git - 使用 git-filter-branch 提取多个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19954485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com