Lo generado y lo versionado
Qué entra en el control de versiones y qué no, por qué el directorio de destino de Cargo es tan grande, la discusión honesta sobre los proyectos nativos de móvil, y las claves que nunca deben viajar en el repositorio.
Lo generado, que es casi todo el peso
# Rust: los artefactos de compilaciónsrc-tauri/target/# el frontenddist/node_modules/# los recursos que produce tu propio proceso de datos, si lo tienessrc-tauri/resources/objects/src-tauri/target/ es el que sorprende por tamaño: contiene el resultado de compilar tu código y todas las dependencias, en modo depuración y en modo producción por separado, con símbolos. Unos cuantos gigabytes en un proyecto mediano son normales.
Ese peso es también la caché que hace que la segunda compilación tarde segundos en vez de minutos, así que borrarlo para «limpiar» es tirar trabajo, no higiene. Si de verdad hace falta reducirlo, Cargo tiene un subcomando para limpiar solo lo obsoleto, que es mucho mejor idea que borrar el directorio entero.
La discusión de verdad: src-tauri/gen/
Ahí viven los proyectos nativos de iOS y Android que genera el CLI, y es la única entrada de la lista donde hay dos posturas defendibles.
La recomendación práctica: no versionarlo mientras no toques nada a mano, y versionarlo en cuanto empieces a tocarlo, con los secretos revisados. La postura que sale mal es la de por defecto —no versionarlo y tocarlo a mano— porque el trabajo se pierde en silencio, en la máquina de otro, semanas después. La fase XIII vuelve sobre esto con el detalle de qué se toca de verdad.
Los secretos, que es lo que no se puede deshacer
Esta parte es la que importa de verdad, porque los dos apartados anteriores se arreglan borrando y este no: un secreto que llega al historial hay que revocarlo, no borrarlo. Un git rm no lo quita del historial, y aunque se reescriba, hay que asumir que alguien pudo copiarlo.
Los sitios de un proyecto de Tauri donde aparecen secretos:
| qué | dónde suele acabar | qué hacer |
|---|---|---|
| La clave privada del updater | la genera el CLI y la gente la deja en el proyecto | nunca en el repositorio. Va en el gestor de secretos de tu integración continua. Nivel 64 |
| El certificado de firma de macOS | exportado como fichero para la integración continua | igual: variable de entorno cifrada, no fichero versionado. Nivel 60 |
| El certificado de Windows | igual | Nivel 62 |
| Credenciales de notarización | a veces en un script | Nivel 61 |
| Tokens de servicios que use tu core | en la configuración, o incrustados en el código | ninguna de las dos. Nivel 34 y 48 |
Y una advertencia específica del framework: la clave pública del updater sí va en tauri.conf.json, y eso es correcto —es pública—. La privada es la que firma, vive fuera, y si se filtra alguien puede servir una actualización que tu aplicación aceptará como legítima. Es el peor secreto que se puede perder de todo el proyecto.
El fichero completo
# generado por Cargosrc-tauri/target/# generado por el frontenddist/node_modules/# proyectos nativos de móvil — ver la discusión de arriba antes de decidirsrc-tauri/gen/# NUNCA: claves y certificados*.key*.p12*.pfx*.cer.env.env.*!.env.exampleLas últimas líneas no son de este framework: son de cualquier proyecto que firme algo. Y la penúltima, la exclamación, es la que permite versionar un fichero de ejemplo con los nombres de las variables y ningún valor, que es la forma correcta de documentar qué secretos hace falta configurar.