如何解决git远程仓库过大假如有一天你看到下面这种仓库,阁下该如何应对。而且这还是一个前端项目,如果通过.zip方式下载
假如有一天你看到下面这种仓库,阁下该如何应对。而且这还是一个前端项目,如果通过.zip方式下载下来,实际的项目文件地址并没有那么大,也才40-50MB
。
问题原因
实际项目文件没有那么大,为何显示缺占用约4GB
的内存。当然第一印象可以看出是6k
多条提交记录导致的,但经过排查发现问题所在并非每条提交记录也就0.几MB
。
后来发现主要的始作俑者是npm run build
后,项目中每次会把打包好的dist
作为一条提交记录推送上去,这样一来每次文件的变更以及部分静态文件都会被git作为历史变更给记录上去。
.gitignore中配置忽略文件
当然你可以尝试在 .gitignore
中配置忽略文件,每次提交时忽略dist
文件夹
node_modules/
/dist/
BUT!! 目前这个项目可能还需要到/dist
文件,以便达到后续的发布等操作。那行吧,懒得改了,想想别的办法。
git-filter-repo 代码仓过滤工具
你可能会看到 git-filter-branch
可能他两个性质差不多,但是官方已经不推荐了,所以就直接先用靠谱的。
什么是git-filter-repo
git-filter-repo 是一个强大的工具,用于修改 Git 仓库的历史。
但需要注意的是,重写历史可能会给协作开发带来一些问题,因为其他开发者的本地副本可能与新的历史不兼容。
- 过滤提交:可以根据各种条件筛选提交,例如作者、提交消息、文件路径等。这对于清理仓库历史中的特定提交非常有用;
- 过滤文件:能够选择性地包括或排除特定的文件或文件类型。这对于从仓库历史中移除敏感信息或大型文件很有帮助;
- 重写历史:
git-filter-repo
可以重写 Git 仓库的历史,使得过滤后的结果成为新的历史记录。这意味着所有的分支、标签和引用都会被更新以反映新的历史。
安装
因为git内置命令中,没有这个,所以需要额外下载。
- 下载之前需要先下载python。
- 下载完成后,执行以下命令安装
git-filter-repo
pip install git-filter-repo
3. 查看git-filter-repo的安装目录
pip show git-filter-repo
4. 配置目录下的git_filter_repo.py
执行脚本到环境变量中(不会配置环境变量的,建议百度)
使用
⚠⚠如果你已经决定要做以下操作,建议重新
git clone [远程仓库地址]
项目备份。一定要做好备份操作,因为你还不清楚这么做是否符合你的期望。因此一定要,一定要,一定要做好备份!!!
针对此项目,因为每次打包都会生成全新的dist
文件,所以要做的就是把历史提交记录中涉及到dist
文件的修改给剔除掉。
git-filter-repo --force --path dist --invert-paths
--force
:强制进行操作;--path dist --invert-paths
:--path
参数用于指定要操作的文件路径。在这里指定了dist
目录。--invert-paths
的作用是反转路径选择,即排除指定的路径。结合起来,这个命令会从仓库的历史提交中排除dist
目录,意味着在后续的操作中,dist
目录及其内容将不被处理,而其他路径会被操作。
执行完后,本地的.git文件会有很明显的缩小,此时部分涉及到的提交也会被剔除掉。可能需要你重新推送到远程仓库,这里建议重新推送到一个新仓库中,并非强制推送到原有仓库,除非项目开发只有你一人。
以上操作并非会直接推送到你的远程仓库,只是在你本地做了强制性改变,因此不用担心会影响到他人。除非你后续做了强制的git push
操作。
成效
对比下成效,发现会有很明显的压缩,也确定了是每次打包推送的dist
文件导致的项目过大
可能对你有帮助
也许你会有其他诉求,目前AI这么发达,如果要解决其它问题,问一下就可以了。大致思路是这样的,希望可以帮到你。 后续我也会及时更新遇到的问题~~ 感谢🙇
转载自:https://juejin.cn/post/7418681965941571620