Hüppa põhisisu juurde Hüppa navigatsiooni juurde Hüppa jaluse juurde

Hargnemine -- commit ja tagasipööramine

Külmuta repositooriumi olekud muutumatuteks commit'ideks, nimeta need branch'idega ja vaata iga commit uuesti kirjutatava forkina.

Hargnemine — commit ja tagasipööramine

Versiooni oma repositooriumid nagu koodi. Commit külmutab forki muutumatuks kujutiseks; branch annab sellele nime; checkout muudab iga commit’i uuesti värskeks kirjutatavaks forkiks. Selles juhendis teeme teadaolevalt töötavast olekust commit’i, langetame päris PostgreSQL tabeli ja saame kõik read tagasi sekunditega.

Vaata juhendvideot

Mudel

Commit'id, branch'id, checkout

Commit’id ei muutu kunagi — need keelduvad isegi ühendamisest. Forkid ei oota kunagi — checkout on peaaegu kohene reflink-kloon. Täielik mõttemudel on kirjas hargnemise juhendis.

Tee kontrollpunkt

Markerifail teeb versiooni nähtavaks ja päris andmebaas muudab tagasipöörамise sisukaks: customers tabel hoiab kolme rida.

rdc term connect app:work@<machine-name> --command 'echo v1 > version.txt && cat version.txt'

Kirjutage oma oleku esimene versioon töötavasse forki.

rdc term connect app:work@<machine-name> --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"'

Forkis töötab ka päris PostgreSQL andmebaas: customers-tabel sisaldab kolme rida.

rdc repo commit app:work --message 'v1 baseline'

Tehke töötavas forkis commit: kogu repository olek, andmebaas kaasatud, külmutatakse muutumatuks nimega hetktõmmiseks.

rdc repo branch app:work --branch stable

Looge commitile osutav haru, inimloetav nimi külmutatud oleku jaoks.

Commit talletab kõik: failid ja PostgreSQL andmekataloogi. stable branch nimetab nüüd selle külmutatud oleku.

Jätka tööd

rdc term connect app:work@<machine-name> --command 'echo v2 > version.txt && cat version.txt'

Jätkake tööd: fork muutub, commititud ajalugu jääb külmutatuks.

Katastroof

Riskantne muutus langetab tabeli. Seejärel kinnitab päring, et kahju on päris.

rdc term connect app:work@<machine-name> --command 'docker exec db psql -U app -d app -c "DROP TABLE customers"'

Riskantne muudatus eemaldab töötavas forkis customers-tabeli.

rdc term connect app:work@<machine-name> --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"'

Tabeli päring ebaõnnestub nüüd: relatsioon "customers" ei ole olemas. Andmed on töötavast forkist tõesti kadunud.

ERROR: relation "customers" does not exist. Kolm rida, kadunud. Päriselus on see hetk, mil kõht vajub — siin aga on see edasise lahenduse ettevalmistus.

rdc repo commit app:work --message 'v2 risky change'

Tehke ka uuele olekule commit, eemaldatud tabel kaasatud. Ajalugu kasvab nagu git log.

rdc repo log app:work

Vaadake repo log abil commit-ajalugu läbi: sõnumid, autorid, vanemad.

Ajalugu jäädvustab, mis tegelikult juhtus, katki olek kaasa arvatud: v2 risky change peal, v1 baseline all.

Pöördu tagasi sekunditega

rdc repo checkout stable --from app:work --tag rollback

Checkoutige stable-haru värskesse kirjutatavasse forki, peaaegu kohene tänu copy-on-write'ile.

rdc repo up app:rollback

Käivitage rollback-fork. See töötab töötava forkiga kõrvuti.

rdc term connect app:rollback@<machine-name> --command 'cat version.txt'

Lugege rollback-forkis märgisfaili: esimene versioon, täpselt nagu commititud.

rdc term connect app:rollback@<machine-name> --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"'

Küsige rollback-forkis customers-tabelit: kolm rida, täpselt nagu commititud. Rollback taastas andmebaasi, mitte ainult failid.

Tagasipööratud fork loeb v1 ja customers tabel on tagasi kõigi kolme reaga. Tagasipööramine taastas andmebaasi, mitte ainult faile. Midagi pole üle kirjutatud: töötaval forkil on endiselt teine versioon ja video avab mõlemad VS Code’is selle tõestamiseks.


Edasi: Elus migratsioon.