Ana içeriğe atla Navigasyona atla Alt bilgiye atla

Dallanma: Commit ve Geri Alma

Depo durumlarını değiştirilemez commit'lere dondurun, onlara branch ile isim verin ve herhangi bir commit'i yazılabilir fork olarak geri yükleyin.

Dallanma: Commit ve Geri Alma

Depolarınızı kod gibi versiyonlayın. Bir commit, fork’u değiştirilemez bir imaja dondurur; branch ona isim verir; checkout herhangi bir commit’i yeni bir yazılabilir fork’a dönüştürür. Bu öğreticide bilinen iyi bir durumu commit’liyoruz, gerçek bir PostgreSQL tablosunu siliyoruz ve tüm satırları saniyeler içinde geri getiriyoruz.

Öğreticiyi izleyin

Model

Commits, branches, checkout

Commit’ler hiçbir zaman değişmez: bağlanmayı bile reddederler. Fork’lar hiç beklemez: checkout neredeyse anlık bir reflink klonudur. Tam zihinsel model dallanma rehberinde bulunur.

Bir kontrol noktası oluşturun

İşareti dosyası sürümü görünür kılar; gerçek bir veritabanı geri almayı anlamlı kılar: customers tablosu üç satır içeriyor.

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

Durumunuzun birinci sürümünü çalışma fork'una yazın.

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

Fork aynı zamanda gerçek bir PostgreSQL veritabanı çalıştırıyor: customers tablosu üç satır içeriyor.

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

Çalışma fork'unu commit edin: veritabanı dahil tüm repository durumu, değişmez ve isimli bir anlık görüntüye dondurulur.

rdc repo branch app:work --branch stable

Commit'i gösteren bir branch oluşturun; dondurulmuş durum için insanın anlayabileceği bir isim.

Commit her şeyi yakalar: dosyalar ve PostgreSQL veri dizini. stable branch artık o dondurulmuş duruma isim verir.

Çalışmaya devam edin

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

Çalışmaya devam edin: fork değişir, commit'lenmiş geçmiş donuk kalır.

Felaket

Riskli bir değişiklik tabloyu siliyor. Ardından sorgu hasarın gerçek olduğunu doğruluyor.

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

Riskli değişiklik çalışma fork'undaki customers tablosunu siliyor.

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

Tabloyu sorgulamak artık başarısız oluyor: "customers" ilişkisi mevcut değil. Veri gerçekten çalışma fork'undan gitti.

ERROR: relation "customers" does not exist. Üç satır, gitti. Gerçek hayatta midenizin sıkıştığı an burasıdır; burada ise sonucu anlamlı kılan kurguyu oluşturuyor.

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

Yeni durumu da commit edin, silinen tablo dahil; geçmiş bir git log gibi büyür.

rdc repo log app:work

Repo log ile commit geçmişinde gezinin: mesajlar, yazarlar, üst öğeler.

Tarihçe gerçekte olanı kaydeder, bozuk durum dahil: üstte v2 risky change, altında v1 baseline.

Saniyeler içinde geri alın

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

Stable branch'i yeni bir yazılabilir fork'a checkout edin; copy-on-write sayesinde neredeyse anında.

rdc repo up app:rollback

Rollback fork'unu başlatın; çalışma fork'uyla yan yana çalışır.

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

Rollback fork'undaki işaret dosyasını okuyun: birinci sürüm, commit'lendiği gibi.

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

Rollback fork'undaki customers tablosunu sorgulayın: üç satır, commit'lendiği gibi. Rollback yalnızca dosyaları değil, veritabanını da geri yükledi.

Geri alma fork’u v1’i okur ve customers tablosu üç satırıyla birlikte geri gelir. Geri alma yalnızca dosyaları değil, veritabanını da geri yükledi. Hiçbir şeyin üzerine yazılmadı: çalışma fork’unda ikinci sürüm hâlâ duruyor ve video bunu kanıtlamak için her ikisini de VS Code’da açıyor.


Sonraki: Canlı Taşıma.