Branching: Commit e Rollback
Versiona i tuoi repository come fosse codice. Un commit congela un fork in un’immagine immutabile; un branch gli assegna un nome; checkout trasforma qualsiasi commit in un fork scrivibile fresco. In questo tutorial facciamo il commit di uno stato noto come buono, eliminiamo una tabella PostgreSQL reale e recuperiamo ogni riga in pochi secondi.
Guarda il tutorial
Il modello
I commit non cambiano mai: si rifiutano persino di montarsi. I fork non aspettano: il checkout è un clone reflink quasi istantaneo. Il modello mentale completo si trova nella guida al branching.
Crea un checkpoint
Un file marcatore rende visibile la versione, e un database reale rende il rollback significativo: la tabella customers contiene tre righe.
rdc term connect --machine <machine-name> --repository app:work --command 'echo v1 > version.txt && cat version.txt' Scrivi la versione uno del tuo stato nel fork di lavoro.
rdc term connect --machine <machine-name> --repository app:work --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"' Il fork esegue anche un vero database PostgreSQL: la tabella customers contiene tre righe.
rdc repo commit --name app:work --message 'v1 baseline' --machine <machine-name> Committa il fork di lavoro: l'intero stato del repository, database incluso, viene congelato in uno snapshot immutabile e con nome.
rdc repo branch --branch stable --name app:work Crea un branch che punta al commit, un nome leggibile per lo stato congelato.
Il commit cattura tutto: i file e la directory dei dati di PostgreSQL. Il branch stable ora denomina quello stato congelato.
Continua a lavorare
rdc term connect --machine <machine-name> --repository app:work --command 'echo v2 > version.txt && cat version.txt' Continua a lavorare: il fork cambia, la cronologia committata rimane congelata.
Il disastro
Una modifica rischiosa elimina la tabella. Poi la query conferma che il danno è reale.
rdc term connect --machine <machine-name> --repository app:work --command 'docker exec db psql -U app -d app -c "DROP TABLE customers"' La modifica rischiosa elimina la tabella customers nel fork di lavoro.
rdc term connect --machine <machine-name> --repository app:work --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"' Interrogare la tabella ora fallisce: relation "customers" does not exist. I dati sono davvero spariti dal fork di lavoro.
ERROR: relation "customers" does not exist. Tre righe, sparite. Nella vita reale è il momento in cui ti cade lo stomaco; qui è la premessa per il lieto fine.
rdc repo commit --name app:work --message 'v2 risky change' --machine <machine-name> Committa anche il nuovo stato, tabella eliminata inclusa; la cronologia cresce come un git log.
rdc repo log --name app:work --machine <machine-name> Esplora la cronologia dei commit con repo log: messaggi, autori, parent.
La cronologia registra quello che è davvero successo, stato rotto incluso: v2 risky change sopra, v1 baseline sotto.
Rollback in pochi secondi
rdc repo checkout --ref stable --from app:work --tag rollback --machine <machine-name> Fai il checkout del branch stable in un nuovo fork scrivibile, quasi istantaneo grazie al copy-on-write.
rdc repo up --name app:rollback --machine <machine-name> Avvia il fork di rollback, viene eseguito insieme al fork di lavoro.
rdc term connect --machine <machine-name> --repository app:rollback --command 'cat version.txt' Leggi il file marker nel fork di rollback: versione uno, esattamente come committata.
rdc term connect --machine <machine-name> --repository app:rollback --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"' Interroga la tabella customers nel fork di rollback: tre righe, esattamente come committate. Il rollback ha ripristinato il database, non solo i file.
Il fork di rollback legge v1, e la tabella customers è tornata con tutte e tre le righe. Il rollback ha ripristinato il database, non solo i file. Nulla è stato sovrascritto: il fork di lavoro mantiene ancora la versione due, e il video apre entrambi in VS Code per dimostrarlo.
Successivo: Migrazione Live.