git - 将git完整克隆转换为浅克隆
问题描述
如何将存储库的深层克隆原地转换为浅层副本?
我正在使用 git 管理我们软件的单独安装,以跟踪安装运行时中代码的任何更改(未跟踪和脏文件),但存储库非常大(800MB),所以大约有几百个副本不是最好的主意。
因此,如果这些存储库可以变成只包含当前部署的提交而不是完整树的浅拷贝,那就太好了。在升级期间,repo 将转换回深层克隆,签出特定的提交,然后将其制成新提交的浅层克隆。
git fetch --depth=1 --update-shallow
不会缩小 .git 目录大小,我猜它会获取任何新提交,但不会删除旧数据。添加--shallow-exclude=HEAD^2
会使 git 抛出错误,虽然不完全确定它应该如何工作,但我会冒险猜测它在删除 HEAD^2 时遇到了冲突的要求,但想要检查 HEAD,这将取决于深度克隆中的 HEAD^2。
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
解决方案
好的,所以这就是最终的解决方案:
ORIGIN_URL=$(git remote get-url origin)
COMMIT=$(git rev-parse HEAD)
rm -rf .git
git init .
git remote add origin $ORIGIN_URL
git fetch origin $COMMIT --depth 1
git reset --mixed $COMMIT
推荐阅读
- javascript - 需要帮助在 Javascript 中创建 for 循环数组
- angular - Angular 5 HTTP post 内部服务器错误无法在组件中订阅
- python - 如何在 tkinter 中为多个按钮创建全局样式?
- react-native - 尝试在时间模式下打开反应本机 datetimepicker 时应用程序崩溃且没有错误
- python - 生成库存列表:使用列表中嵌套字典的值创建列表
- rust - 我如何理解 Rust 编译器目标的数据布局字符串?
- html - 如何删除滚动并适合响应式屏幕?
- intellij-idea - 如何在实时模板中调试 groovy 脚本?
- c# - ValueConverter 实体框架核心
- java - 使用 PACT-builder 时如何向 PACT 添加匹配规则?