Los snapshots, y dónde viven
Un snapshot es una copia de tu árbol de trabajo, tomada en local, que no es un commit. No tiene padre, ni mensaje que merezca la pena escribir, ni sitio en tu…
Un snapshot es una copia de tu árbol de trabajo, tomada en local, que no es un commit. No tiene padre, ni mensaje que merezca la pena escribir, ni sitio en tu historia, ni forma de llegar a un remoto. Existe para que lo siguiente destructivo que hagas sea reversible.
Por qué no un commit
Git ya tiene tres respuestas a «déjame guardar esto un segundo»: un commit WIP, un stash y el reflog. Cada una cobra un peaje. El commit WIP ensucia la historia que luego tendrás que limpiar. El stash es una única pila sin nombres, y aplicar la entrada equivocada es cara o cruz. El reflog no es un guardado en absoluto: registra dónde apuntaban las refs, así que recupera una rama, no el fichero sin commitear que acabas de sobrescribir.
Un snapshot es el que falta: con nombre, listable, restaurable por id, e invisible para todos los demás.
Dónde viven, y el fallo que lo decidió
Los snapshots se escriben en <gitdir>/torii/snapshots — dentro de .git, no al lado.
No empezaron ahí. Empezaron en un directorio junto al árbol de trabajo, lo cual va bien hasta que alguien ejecuta torii save -a. add_all recorre el árbol, encuentra el directorio de snapshots y lo indexa. Un repositorio produjo así un commit de 681 MB y un push que no terminaba nunca.
Dentro de .git el problema no puede repetirse, porque el indexado nunca entra ahí. Merece decirse claro en vez de arreglarlo en silencio: durante un tiempo, el mecanismo de seguridad fue lo que rompía el repositorio.
Qué toma uno automáticamente
Toda reescritura de torii history. save --reset --reset-mode hard. worktree remove. reauthor y mailmap apply. En todos los casos el snapshot se toma antes de tocar el primer objeto, así que torii snapshot restore <id> deja el árbol exactamente como estaba.
También puedes tenerlos por reloj:
torii config set snapshot.auto_enabled true
torii config set snapshot.auto_interval_minutes 30El intervalo puede vivir en .torii/auto-interval, que viaja con el proyecto en vez de con tu máquina — útil cuando el proyecto es de esos donde media hora de trabajo perdido importa.
El que sigue roto
torii snapshot stash a veces informa de éxito sin haber guardado nada. Es conocido, no está arreglado en 0.13.0, y hasta que lo esté el camino que siempre funciona es torii snapshot create -n "wip". Una red de seguridad con un agujero intermitente merece documentarse más alto que una función nueva.