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
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 --machine <machine-name> --repository app:work --command 'echo v1 > version.txt && cat version.txt' Durumunuzun birinci sürümünü çalışma fork'una yazın.
rdc term connect --machine <machine-name> --repository app:work --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 --name app:work --message 'v1 baseline' --machine <machine-name> Ç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 --branch stable --name app:work 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 --machine <machine-name> --repository app:work --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 --machine <machine-name> --repository app:work --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 --machine <machine-name> --repository app:work --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 --name app:work --message 'v2 risky change' --machine <machine-name> Yeni durumu da commit edin, silinen tablo dahil; geçmiş bir git log gibi büyür.
rdc repo log --name app:work --machine <machine-name> 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 --ref stable --from app:work --tag rollback --machine <machine-name> Stable branch'i yeni bir yazılabilir fork'a checkout edin; copy-on-write sayesinde neredeyse anında.
rdc repo up --name app:rollback --machine <machine-name> Rollback fork'unu başlatın; çalışma fork'uyla yan yana çalışır.
rdc term connect --machine <machine-name> --repository app:rollback --command 'cat version.txt' Rollback fork'undaki işaret dosyasını okuyun: birinci sürüm, commit'lendiği gibi.
rdc term connect --machine <machine-name> --repository app:rollback --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.