- Node.js项目中安装了几个npm包的文件夹
- 这些包位于
node_modules
文件夹中 - 将该文件夹添加到git仓库并将代码推送到GitHub(当时没有考虑npm部分)
- 后来发现你实际上不需要把那个文件夹作为代码一部分
- 删除该文件夹并推送
此时,总的git repo大小约为6MB,而实际上的代码(除了那个文件夹外)只有300 KB。
现在我最终想要的是,从git的历史记录中摆脱那个包文件夹的细节,这样如果有人克隆它,他们就不必下载价值6MB的历史记录,因为他们所得到的实际上只是最后提交的300KB的文件。
我查阅了可能的解决方案,并尝试了以下两种方法:
这个Gist似乎起作用了,运行脚本后,它显示已经摆脱了那个文件夹,并且之后显示修改了50个提交。但是它不允许我推送该代码。当我尝试推送时,它会显示Branch up to date
,但在git status
上却显示修改了50个提交。另外两种方法也没有帮助。
即使它显示已经删除了该文件夹的历史记录,但当我检查本地主机上该仓库的大小时,它仍然在6MB左右。(我也删除了refs/original
文件夹,但是没有看到仓库大小的变化)。
我想要澄清的是,是否有一种方法可以除去不仅是提交历史记录(这是我认为发生的唯一事情),而且还包括那些git假定需要回滚的文件。
假设解决此问题的方法被应用于我的本地主机,但无法复制到GitHub仓库,是否可以克隆该仓库,回滚到第一个提交,执行这个技巧并将其推送(还是这意味着git仍将拥有所有这些提交的历史记录?-也就是说6MB)。
我的最终目标是找到最好的方法从git中删除文件夹内容,以便用户不必下载6MB的内容,仍可能具有从未触及模块文件夹(几乎全部)的其他提交在git的历史记录中。
我该如何做到这一点?