Guía9 min

git count-objects para coding agents: disco, no housekeeping

Resumen

git count-objects cuenta objetos sueltos y su disco. Diagnóstico con -v. Cero git-repack. Cero prune-packed. No es gc ni fsck. Git 2.50.1.

GitHub
Conteo de objetos sueltos y packs: count-objects lee el object database; HEAD y el working tree no se mueven

Qué resuelve

Esta pieza se queda en la decisión práctica: qué instalar, qué riesgo agrega y cómo aplicarlo sin romper operación.

git count-objects cuenta objetos sueltos y el disco que ocupan. El man (git-count-objects(1); git-scm.com/docs/git-count-objects HTTP 200, last-modified 2026-08-31; last updated in 2.51.1, 2025-10-15; 2.51.2 → 2.55.0 sin cambios; pie del man local Git 2.50.1.428.g0e8243, 2025-07-22; binario Git 2.50.1 / Apple Git-155): Count unpacked number of objects and their disk consumption. SYNOPSIS: git count-objects [-v] [-H | --human-readable].

No es gc. gc es porcelain: empaqueta, recorta reflog y ya llama prune con gracia. count-objects no escribe. El man lo dice al inicio: to help you decide when it is a good time to repack. Decidir no es correr git-repack.

Tampoco es fsck. fsck recorre alcanzabilidad y puede listar dangling. count-objects no valida hashes. No toca el índice ni HEAD.

Contrato: git count-objects -v. Cero git-repack. Cero prune-packed. Cero -v volcado a un log eterno. Housekeeping = gc --auto --quiet.

Qué hace (y qué no)

Sin flags imprime una línea: N objects, M kilobytes. Eso es solo sueltos (unpacked). No lista packs. No lista garbage.

-v / --verbose añade claves. El man las nombra así:

  • count: número de objetos sueltos
  • size: disco de sueltos, en KiB (salvo -H)
  • in-pack: objetos ya en packs
  • size-pack: disco de packs, en KiB (salvo -H)
  • prune-packable: sueltos que también están en un pack. These objects could be pruned using git prune-packed.
  • garbage: archivos en el object database que no son ni suelto válido ni pack válido
  • size-garbage: disco de ese garbage, en KiB (salvo -H)
  • alternate: path absoluto de object databases alternos; puede repetirse

El binario 2.50.1 también imprime packs: (número de archivos pack). El man web no lo lista como campo propio; no lo trates como API estable. Si aparece, léelo. Si no, no lo inventes.

-H / --human-readable: Print sizes in human readable format. Cambia size, size-pack y size-garbage. No cambia count ni in-pack.

count-objects no borra. prune-packable es un número, no una orden. Un agente no encadena git prune-packed porque vio un entero. Tampoco encadena git-repack porque el man dijo “when it is a good time”.

Verificado 2026-09-06 (Git 2.50.1 / Apple Git-155). Worktree propio, working tree limpio:

  • git count-objects: 0. Una línea N objects, M kilobytes. rev-parse HEAD igual. status -sb sin cambios en tracked.
  • git count-objects -v: 0. Claves count / size / in-pack / size-pack / prune-packable / garbage / size-garbage. Puede imprimir warning: garbage found: si hay basura en el object database del worktree. HEAD igual.
  • git count-objects -H: 0. Misma línea, tamaño en MiB/KiB.
  • git count-objects -v -H: 0. Tamaños human-readable. HEAD igual.
  • --foo: 129, *unknown option foo'*. SYNOPSIS: solo -vy-H`.
  • Fuera de un repo: 128, not a git repository.

count-objects -v lista claves de sueltos y packs; no mueve HEAD

Lo que el agente sí / no corre

QuieroComandoTrampa
¿Cuántos sueltos hay?git count-objects -vdu -sh .git y adivinar
Tamaños legiblesgit count-objects -v -Hparsear kilobytes a mano
Housekeepinggc --auto --quietgit-repack porque el man lo mencionó
¿Hay objetos rotos?fscktratar garbage: como fsck
Sueltos inalcanzablesprune -nprune-packed porque prune-packable > 0

Prohibido en autónomo:

  • git-repack / git pack-objects. count-objects informa. No reescribe packs.
  • git prune-packed porque prune-packable no es cero. Ese comando borra sueltos ya empaquetados. No es el default de un agente.
  • Encadenar prune a pelo. prune borra. count-objects no.
  • Tratar garbage: como licencia para rm dentro de .git/objects. Reporta el número y para.
  • -v a un log que el LLM relee entero. Cierre = las claves, no un dump.
  • Correrlo en el worktree del humano o en main. Solo worktree propio.
  • Confundirlo con gc. gc.auto default 6700 sueltos. count-objects te da count. gc --auto decide si trabaja.
  • Confundirlo con fsck. fsck valida. count-objects cuenta.
  • Usar du sobre .git como sustituto. Mezcla worktrees, hooks y logs. El man mide el object database.

Receta (60 segundos)

Solo en un worktree propio, y solo si el disco o un comando ya habló de packs/sueltos:

git status -sb
git count-objects -v
echo $?
git rev-parse HEAD
  • 0 y count bajo el umbral de gc.auto (default 6700): no hay trabajo. Reporta las claves y para.
  • 0 y count alto, o size-pack disparado: no corras git-repack. Si el disco lo pide, gc --auto --quiet.
  • 0 y garbage > 0: reporta el entero. Cero rm en .git. Cero prune-packed.
  • 128: no hay repo. No reintentes con -H.
  • 129: opción desconocida. No añadas flags de prune.

Cierre = las claves. Cero commit. Cero push a main. Cero “ahora repack”.

size y size-pack son diagnóstico; housekeeping es gc --auto, no git-repack

count-objects vs gc vs prune vs fsck

gc es housekeeping: --auto --quiet. Cero --aggressive. Cero --prune=now. El man de count-objects no manda a gc por nombre; manda a decidir. La decisión del agente es gc --auto, no git-repack.

prune borra sueltos inalcanzables. Diagnóstico con -n. Cero a pelo. Cero --expire=now. prune-packable no es una orden de prune.

fsck diagnostica integridad. dangling no es error. count-objects no recorre grafos.

FAQ

¿count alto significa que debo borrar? No. count son sueltos. El default de gc.auto es 6700. Por debajo, gc --auto sale sin trabajar. Un agente no adelanta el umbral.

¿prune-packable > 0 autoriza git prune-packed? No. El man describe could be pruned. Could no es must. Housekeeping = gc --auto --quiet.

¿garbage es un objeto corrupto? No necesariamente. Es un archivo en el object database que no es suelto válido ni pack válido. En un worktree de Git a veces aparece un warning: garbage found: apuntando a refs del worktree. Reporta el entero. No abras .git con rm.

¿Puedo parsear solo la línea corta? Sí, si solo necesitas sueltos. La línea sin -v es N objects, M kilobytes. Si el disco o los packs importan, usa -v. -H solo cambia el formato de tamaños.

El curso instalar un agente cubre el loop local. Hub: comparativas y decisiones. count-objects no es gc: plumbing que cuenta sueltos y packs, no housekeeping.