gpt4 book ai didi

git - 将许多子目录分离到一个新的、独立的 Git 存储库中

转载 作者:IT王子 更新时间:2023-10-29 01:21:32 28 4
gpt4 key购买 nike

本题基于Detach subdirectory into separate Git repository

我不想分离一个子目录,而是要分离几个。例如,我当前的目录树如下所示:

/apps
/AAA
/BBB
/CCC
/libs
/XXX
/YYY
/ZZZ

我想要这样:

/apps
/AAA
/libs
/XXX

--subdirectory-filtergit filter-branch 的参数将不起作用,因为它会在第一次运行时删除除给定目录之外的所有内容。我认为对所有不需要的文件使用 --index-filter 参数会起作用(尽管很乏味),但如果我尝试多次运行它,我会收到以下消息:

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

有什么想法吗?时间差

最佳答案

不必处理子 shell 和使用 ext glob(如 kynan suggested ),尝试这种更简单的方法:

git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- apps/AAA libs/XXX' --prune-empty -- --all

void.pointer's comment 所述, 这将从当前存储库中删除除 apps/AAAlibs/XXX 之外的所有内容。

修剪空的 merge 提交

这留下了许多空的 merge 。这些可以通过 raphinesse 中描述的另一遍删除在他的 answer :

git filter-branch --prune-empty --parent-filter \
'sed "s/-p //g" | xargs -r git show-branch --independent | sed "s/\</-p /g"'

⚠️ 警告:以上必须使用 GNU 版本的 sedxargs 否则它会删除所有作为 xargs 失败。 brew install gnu-sed findutils 然后使用gsedgxargs:

git filter-branch --prune-empty --parent-filter \
'gsed "s/-p //g" | gxargs git show-branch --independent | gsed "s/\</-p /g"'

关于git - 将许多子目录分离到一个新的、独立的 Git 存储库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2982055/

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