git - 如何忽略 git 中大量已删除的文件?
问题描述
我添加了一个包含数百万个文件的文件夹,git add
并使用git rm -r FolderPath
. 然后我git commit
提交了,.git 中的对象文件夹大小达到了 250mb 以上。因此,当我尝试推送存储库时,它实际上并不能完成大量文件的工作。我尝试了很多方法,如git add -u
, git gc
,git gc --prune=now --aggressive
等,但没有一个能解决问题。
最后我删除了对象文件夹,一切都搞砸了。所以我既不能推也不能拉。
有人知道避免这些情况的简单方法吗?
解决方案
最好的方法是:不要提交你不想提交的内容。
每个提交都会添加到存储库。存储库只不过是大量提交的集合。
所有提交都是完全、完全只读的。任何提交的任何部分都不能更改。
每个提交都有其所有文件的完整快照。如果快照中的文件与某个先前快照中的某个先前文件相同,Git 可以并且确实重复使用先前的文件。如果快照没有以前的文件,它只是没有文件。这不会改变之前的快照。您仍然只是添加一个快照:它只是一个没有文件的快照。
可以删除一个提交,排序。但是,要做到这一点,您还必须删除每个后续(后代)提交,因为每个提交的一部分是其先前提交的 commit-hash-ID ,它必须存在。因此,如果您错误地输入了一个大提交,那么当它仍然是最后一个提交时,很容易将其删除。但是,如果您在其之上添加更多提交,您现在必须从错误的提交中删除每个提交。
我将剩下的留给如何撤消 Git 中最近的本地提交?
推荐阅读
- c# - 如何在 c# 中将 grant_type 设置为 key 并将 value 设置为 client_credentials (rest service)
- c# - 防止EF核心在尝试删除但有限制约束时抛出异常异常
- javascript - 如何将时间从UTC更改为moment.js中选择的时区?
- c++ - 如何将字符串的一部分转换为整数?
- angular - 在 Angular 6 Typescript 中更改事件的 FullCalendar 单元格背景颜色
- blockchain - 仅使用 EVM API 在区块链上部署智能合约,而不使用 geth 或 tuffle 或 ganache?
- c# - Entity Framework Core 遍历大 blob 数据没有内存溢出,最佳实践
- python-3.x - 模拟补丁变量的方法
- caching - 如果页面已发布或过期,如何清除缓存
- jquery - 获取数据属性的值
- 使用 jQuery 的元素