Quadern

Els snapshots, i on viuen

Un snapshot és una còpia del teu arbre de treball, presa en local, que no és un commit. No té pare, ni missatge que valgui la pena escriure, ni lloc a la teva…

Un snapshot és una còpia del teu arbre de treball, presa en local, que no és un commit. No té pare, ni missatge que valgui la pena escriure, ni lloc a la teva història, ni manera d'arribar a un remot. Existeix perquè la següent cosa destructiva que facis sigui reversible.

history · pushed c1 c2 c3 c4 snapshot a1f before rebase snapshot 9c2 before reset --hard reset --hard torii snapshot restore 9c2 snapshots live in .git/torii/snapshots · never committed · never pushed

Per què no un commit

Git ja té tres respostes a «deixa'm desar això un segon»: un commit WIP, un stash i el reflog. Cadascuna cobra un peatge. El commit WIP embruta la història que després hauras de netejar. L'stash és una única pila sense noms, i aplicar l'entrada equivocada és cara o creu. El reflog no és cap desat: registra on apuntaven les refs, així que recupera una branca, no el fitxer sense commitejar que acabes de sobreescriure.

Un snapshot és el que faltava: amb nom, llistable, restaurable per id, i invisible per a tots els altres.

On viuen, i el fallada que ho va decidir

Els snapshots s'escriuen a <gitdir>/torii/snapshots — dins de .git, no al costat.

No van començar aquí. Van començar en un directori al costat de l'arbre de treball, cosa que va bé fins que algú executa torii save -a. add_all recorre l'arbre, troba el directori de snapshots i l'indexa. Un repositori va produir així un commit de 681 MB i un push que no acabava mai.

Dins de .git el problema no es pot repetir, perquè la indexació no hi entra mai. Val la pena dir-ho clar en comptes d'arreglar-ho en silenci: durant un temps, el mecanisme de seguretat va ser el que trencava el repositori.

Què en pren un automàticament

Tota reescriptura de torii history. save --reset --reset-mode hard. worktree remove. reauthor i mailmap apply. En tots els casos l'snapshot es pren abans de tocar el primer objecte, així que torii snapshot restore <id> deixa l'arbre exactament com era.

També els pots tenir per rellotge:

torii config set snapshot.auto_enabled true
torii config set snapshot.auto_interval_minutes 30

L'interval pot viure a .torii/auto-interval, que viatja amb el projecte en comptes de amb la teva màquina — útil quan el projecte és d'aquells on mitja hora de feina perduda importa.

El que encara és trencat

torii snapshot stash de vegades informa d'èxit sense haver desat res. És conegut, no està arreglat a 0.13.0, i fins que ho estigui el camí que sempre funciona és torii snapshot create -n "wip". Una xarxa de seguretat amb un forat intermitent mereix documentar-se més alt que una funció nova.