- 作者:老汪软件技巧
- 发表时间:2024-09-29 17:01
- 浏览量:
假如有一天你看到下面这种仓库,阁下该如何应对。而且这还是一个前端项目,如果通过.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:
执行完后,本地的.git文件会有很明显的缩小,此时部分涉及到的提交也会被剔除掉。可能需要你重新推送到远程仓库,这里建议重新推送到一个新仓库中,并非强制推送到原有仓库,除非项目开发只有你一人。
以上操作并非会直接推送到你的远程仓库,只是在你本地做了强制性改变,因此不用担心会影响到他人。除非你后续做了强制的git push操作。
成效
对比下成效,发现会有很明显的压缩,也确定了是每次打包推送的dist文件导致的项目过大
可能对你有帮助
也许你会有其他诉求,目前AI这么发达,如果要解决其它问题,问一下就可以了。大致思路是这样的,希望可以帮到你。后续我也会及时更新遇到的问题~~ 感谢