0Pricing
Git & GitHub Professional Workflow · 课时

仓库维护与清理

学习使用 `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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Git Reflog 与恢复历史
  2. 使用 Git Bisect 调试
  3. 仓库维护与清理
  4. 使用 git filter-repo 重写历史
← 返回 Git & GitHub Professional Workflow