仓库维护与清理
学习使用 `git gc` 和 `git prune` 等命令,清理并优化本地 Git 仓库。
仓库维护与清理 是 CoddyKit 上的免费 Git & GitHub Professional Workflow 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Git & GitHub Professional Workflow 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Git & GitHub Professional Workflow 课程共包含 4 节课。
欢迎学习 Git 仓库维护
随着时间推移,本地 Git 仓库可能会积累不必要的文件,效率也会降低。您可以把它想象成一间杂乱的房间!
在本课中,我们将学习如何使用 git gc 和 git prune 等强大命令清理和优化 Git 仓库,让项目保持顺畅运行。
Git 对象存储详解
首先,让我们了解 Git 如何存储数据。Git 会将项目历史保存为一系列“对象”:
- 数据对象:文件内容
- 树对象:目录及其内容
- 提交对象:项目在某个时间点的快照
- 标签:指向特定提交的指针
这些对象可以作为“松散对象”存储,也可以为了提高效率而压缩为“包文件”。
介绍 `git gc`(垃圾回收)
git gc 命令代表“垃圾回收”。它是 Git 内置的清理和优化仓库的工具。
它的主要任务包括:
- 打包松散对象:将单个对象压缩到包文件中。
- 清理不可达对象:删除一段时间后不再被任何提交、分支或标签引用的对象。
- 移除旧包文件:删除过时的压缩对象文件。
这个过程可以让仓库更小、运行更快。
运行 `git gc`(一般用法)
您可以随时手动运行 git gc。在执行推送或获取等某些操作时,Git 也会在后台自动运行它。
通常运行它是安全的,但最好确保没有尚未提交且可能需要恢复的工作,再进行重大清理。
请尝试在终端中运行:
git gc了解 `git gc` 的输出
运行 git gc 时,您会看到类似以下的输出:
Counting objects: 1234, done.
Compressing objects: 100% (987/987), done.
Writing objects: 100% (1234/1234), done.
Total 1234 (delta 567), reused 0 (delta 0)
Removing duplicate objects: 100% (256/256), done.
Pruning objects: 100% (123/123), done.这表示 Git 正在打包对象、写入新的包文件,并清理(删除)旧的不可达对象。具体数字会根据仓库的状态而有所不同。
聚焦于 `git prune`
虽然 git gc 会处理许多清理任务,但 git prune 专门用于移除“悬空”或“不可达”对象。
- 悬空对象:这些对象存在于您的存储库中,但不再被任何提交、分支或标签引用,也不属于任何包文件。
- 不可达对象:与悬空对象类似,但这是一个更宽泛的术语。它们可能因各种原因存在,例如变基或重置重写历史记录之后。
如果这些对象早于默认的过期时间(通常为 2 周),git prune 就会将其删除。
直接运行 `git prune`
您通常不需要直接运行 git prune,因为 git gc 会调用它。不过,您可以使用它进行更有针对性的清理。
若要查看 git prune 将执行的操作而不实际删除任何内容,请使用 --dry-run 选项:
git prune --dry-run按过期时间清理
默认情况下,git prune(以及 git gc 的清理步骤)只会移除早于两周的对象。您可以使用 --expire 选项覆盖此设置。
如果您希望积极清理最近创建的悬空对象,这会很有用。例如,在进行一次实验性变基后,如果您确定不需要将其撤销,就可以这样做。
例如,清理早于 1 天的对象:
git prune --expire=1.day区别于 `git reflog expire`
请务必不要将 git prune 与 git reflog expire 混淆。虽然二者都与清理有关,但用途不同:
git prune:从对象数据库中删除实际的 Git 对象(数据块、树和提交)。git reflog expire:清理您的引用日志中的条目(这是 HEAD 所在位置的本地历史记录),使某些提交更难找到,但不会删除对象本身。
修改历史记录或运行清理命令时,请始终谨慎!
维护检查
以下哪一项最准确地描述了 git gc 的主要作用?
回顾与后续步骤
恭喜您!您已经学会了如何让 Git 存储库保持整洁高效。
git gc:用于垃圾回收、打包对象和清理对象的一体化命令。git prune:专门查找并移除超过设定过期时间的不可达对象和悬空对象。
定期维护有助于确保您的 Git 工作流保持顺畅,并避免存储库占用过多磁盘空间。请继续保持良好的习惯!
常见问题解答
「仓库维护与清理」课时是免费的吗?
是的 — 「仓库维护与清理」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Git & GitHub Professional Workflow 课程的其余内容,请升级到 CoddyKit PRO。 Git & GitHub Professional Workflow 课程共包含 4 节课。
「仓库维护与清理」这节课中我会学到什么?
学习使用 `git gc` 和 `git prune` 等命令,清理并优化本地 Git 仓库。 你通过在浏览器中直接运行的动手代码来练习 Git & GitHub Professional Workflow,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Git & GitHub Professional Workflow 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Git & GitHub Professional Workflow 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「仓库维护与清理」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Git & GitHub Professional Workflow 课中编写并运行代码吗?
能。每节 Git & GitHub Professional Workflow 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。