Cœu*_*œur 8 git git-submodules
我们的团队不再使用子模块很长一段时间了,我们想通过删除所有缓存的子模块来释放一些存储库空间.
我们只需要删除以下内容吗?
rm -rf .git/modules
Run Code Online (Sandbox Code Playgroud)
或者有更推荐的方法吗?此外,如果可能,我们希望将删除推送到服务器.
注意:使用git 2.5.4和当前状态将所有内容合并到一个分支中.
注意:我们不记得旧提交中使用的子模块的个别名称.
Cœu*_*œur 21
我在关于"不使用子模块"的问题中想出了一个可能的小混淆:是否有未使用的子模块文件夹,或者这些文件夹是否已被删除,只留下缓存?
好吧,我认为我们可以通过首先执行干净的删除过程来解决这两种情况,然后假设某些事情没有正确完成并执行手动清理.
删除子模块的必要步骤在如何删除子模块中说明?.但是为了回答这个问题,我们将立即删除所有子模块,而不假设我们知道子模块的名称.
# 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
Run Code Online (Sandbox Code Playgroud)
我不知道服务器同步.它可以在下次提交时自动完成,或者我们可能需要这些命令:
git submodule sync
git submodule update --init --recursive --remote
Run Code Online (Sandbox Code Playgroud)
使用 git 2.7
git submodule deinit mysubmod
git rm mysubmod
git commit -m "Remove mysubmod"
git push
rm -rf .git/modules/mysubmod
Run Code Online (Sandbox Code Playgroud)
这会更新.gitmodulesand.git/config并删除mysubmodand .git。否则,如果想要在名为 的目录中保存某些内容,就会出现问题mysubmod。
在这种情况下,只剩下最后一部分需要完成。由于子模块基本上只是指向其他存储库的指针,因此不需要清理太多内容,除非删除那些被称为子模块的存储库。使用存储库的旧提交可能会变得更加困难。