我们的团队已经很长时间不再使用子模块了,我们希望通过删除所有缓存的子模块来释放一些仓库空间。
那我们只需要删除以下内容吗?
rm -rf .git/modules
还有更好的推荐方法吗?如果可能的话,我们希望将删除推送到服务器。
注意:使用git 2.5.4,并且当前状态将所有内容合并到一个分支中。
注意:我们不记得旧提交中使用的子模块的个别名称。
我们的团队已经很长时间不再使用子模块了,我们希望通过删除所有缓存的子模块来释放一些仓库空间。
那我们只需要删除以下内容吗?
rm -rf .git/modules
还有更好的推荐方法吗?如果可能的话,我们希望将删除推送到服务器。
注意:使用git 2.5.4,并且当前状态将所有内容合并到一个分支中。
注意:我们不记得旧提交中使用的子模块的个别名称。
在我的问题中,我发现可能会有一些小的混淆,关于“不使用子模块”:是否还留下了未使用的子模块文件夹,还是这些文件夹已经被删除,只剩下缓存?
好的,我认为我们可以通过先遵循清除过程来解决这两种情况,然后假设某些事情没有正确执行,进行手动清理。
删除一个子模块的必要步骤在如何删除子模块中有说明。但为了回答这个问题,我们将一次性删除所有子模块,而不是假设我们知道子模块的名称。
# deinit all submodules from .gitmodules
git submodule deinit .
# remove all submodules (`git rm`) from .gitmodules
git submodule | cut -c43- | while read -r line; do (git rm "$line"); done
# delete all submodule sections from .git/config (`git config --local --remove-section`) by fetching those from .git/config
git config --local -l | grep submodule | sed -e 's/^\(submodule\.[^.]*\)\(.*\)/\1/g' | while read -r line; do (git config --local --remove-section "$line"); done
# manually remove leftovers
rm .gitmodules
rm -rf .git/modules
我不知道服务器同步的情况。它可以在下次提交时自动完成,或者我们可能需要使用这些命令:
git submodule sync
git submodule update --init --recursive --remote
使用 Git 2.7
git submodule deinit mysubmod
git rm mysubmod
git commit -m "Remove mysubmod"
git push
rm -rf .git/modules/mysubmod
.gitmodules
和 .git/config
,并删除其中的 mysubmod
和 .git
。否则,如果想要在名为 mysubmod
的目录中有一些内容,就会出现问题。rm -rf .git/modules
就可以了。 - Cœur
git submodule deinit
,https://dev59.com/QHM_5IYBdhLWcg3wt1k0 - J.J. Hakala.git/modules
文件夹。 - Cœur