[英]Remove refs/original/heads/master from git repo after filter-branch --tree-filter?
[英]git filter-branch remove all submodules from my repo
您好,我已成功重写历史记录并使用git filter-branch -f --prune-empty --tree-filter 'rm -rf <all unwanted dirs>'
获得了我想提取的 5 个文件夹,并保留了所有 git 历史记录。
唯一剩下的问题是子模块,我还有提交
Subproject commit <hash>
我想从我的 git 历史记录中完全删除所有这些子模块提交,我该如何完成?
我已经做到了
git filter-branch -f --prune-empty --tree-filter '
git submodule deinit -f .
git rm -rf lib && rm -rf lib
find . -name .gitmodules -delete' HEAD
假设我所有的子模块都位于lib
目录中
另一个解决方案对我不起作用。 按照关于如何删除子模块的最高投票答案,我使用了以下命令,它更灵活,因为您可以在多个文件夹中指定子模块:
git filter-branch -f --prune-empty --tree-filter '
for SUBMODULE_DIR in submodule-dir-1 lib/submodule-dir-2 lib/submodule-dir-3
do
if [ -d $SUBMODULE_DIR ]; then
git submodule deinit -f $SUBMODULE_DIR
git rm -rf .git/modules/$SUBMODULE_DIR
git rm -f $SUBMODULE_DIR
fi
done
git rm -f --ignore-unmatch .gitmodules' HEAD
实际上,我们正在检查每个提交的子模块文件夹列表。 如果子模块文件夹存在,我们完全删除子模块。 从技术上讲,仅此一项就足够了,因为我们还想摆脱.gitmodules
文件。 如果您只想删除特定的子模块,该行可能需要一些额外的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.