gitattributes para coding agents: text, eol y no reformatear generated
.gitattributes asigna attrs por path: text, eol, ident. GitHub usa linguist-generated para ocultar diffs. Un agente que ‘normaliza CRLF’ o reescribe lockfiles genera ruido. Manual gitattributes: later lines override per attribute.
Por Marco Lee · Reportar un error
Continúa con un curso práctico.gitattributes da atributos a paths: pattern attr1 attr2. Set (text), unset (-text), valor (eol=lf). Líneas posteriores pisan por atributo. Patrones tipo gitignore, con excepces documentadas.
Un agente que corre dos2unix en todo el repo o reescribe pnpm-lock.yaml “con prettier” ignora este archivo. El man page cubre text, eol, working-tree-encoding, filtros. GitHub añade linguist-generated=true para no mostrar el diff en el PR.
No sustituye gitignore ni EditorConfig. Ignore = untracked; attributes = cómo Git trata lo trackeado. El curso instalar un agente no cubre CRLF.
Qué leer antes de tocar files
* text=auto
*.sh text eol=lf
*.bat text eol=crlf
*.png binary
pnpm-lock.yaml linguist-generated=true
dist/** linguist-generated=true
text=auto: Git detecta text vs binary y normaliza eol al commit según core.autocrlf / eol. El agente no convierte a mano.
eol=lf en *.sh: working tree y repo en LF. Forzar CRLF en scripts rompe shebangs en Linux.
binary / -text: no toques el archivo como texto.

linguist-generated
En GitHub, linguist-generated=true marca el path como generado: el PR colapsa el diff y no cuenta en el language stats. Úsalo en lockfiles, dist/, código generado. El agente no “limpia” esos files en el mismo PR que un feature, salvo que el ticket sea regenerarlos.
linguist-vendored similar para vendor. No inventes attrs que Git no conoce; linguist es de GitHub, Git core los ignora.
Receta AGENTS.md
Read .gitattributes before rewriting files.
Do not convert line endings repo-wide.
Do not prettier lockfiles or linguist-generated paths.
Match eol=lf/crlf per glob.
Si el attr está unspecified, no asumas LF. Copia un vecino del mismo glob.

FAQ
¿info/attributes? Local al clone, no se comparte. El repo usa .gitattributes en la raíz (y a veces en subdirs).
¿ident? Expande $Id$. No lo pongas en un blob binario.
¿Merge union? Attr de merge. Un agente no cambia merge drivers de paso.
¿Crear el archivo? Solo si el ticket es “fijar eol”. * text=auto es el mínimo.
Un PR cuyo 90% es pnpm-lock.yaml con linguist-generated ausente es ruido de review. Añadir el attr en un PR aparte (docs/chore) es válido; mezclarlo con un feat de producto no. El agente no “aprovecha” para reordenar el lock.
Verificado 2026-09-03 contra git help gitattributes y GitHub linguist-generated.
De la guía a la práctica
Ruta Pi.dev: instala tu agente de coding
Lleva tus convenciones de trabajo a Pi.dev: instalación, instrucciones, sesiones y operación segura.
Ver el curso gratisContenido gratis, sin registro. Los servicios externos pueden tener costos.
Avisos cuando actualicemos cursos y guías
Recibe actualizaciones por correo. Es opcional: puedes seguir leyendo y abrir cualquier curso sin suscribirte.
Lecturas relacionadas
Sigue explorando Coding Agents y otras piezas para builders.

GitHub Copilot CLI: guía práctica del agente de IA en la terminal

Continue.dev: guía práctica del agente open source en VS Code

Goose: guía práctica del agente open source (CLI, Desktop y MCP)
