Elektrik kesildiğinde Git ne kadar sağlam işliyor?


24

Bir gün Git'i kullanıyordum (hala kullanıyorum) ve taahhütte bulunduğum sırada elektrik kesildi.

Ben (aslında elektrik) geri döndüğümde git deposu bozuldu. Tam adını hatırlamıyorum, ancak "geçersiz referanslar" veya buna benzer bir şeydi.

İşlemin ortasında taahhüdün kırıldığını tahmin etmek kolaydır (endeks eklemelerini otomatik olarak yapan IntelliJ üzerinden taahhütte bulundum). Aslında, 'taahhüt etmenin' aynı isimdeki DBMS işlemi kadar ACID olmadığını tahmin etmek de kolaydı.

S : Repo değiştirme işlemlerinin atomikliğe saygı göstermesini sağlamanın bir yolu var mı? yani eğer elektrik tekrar kesilirse ve söz veriyorum, dosya sistemimin bozuk durumda olmamasını istiyorum.


10
UPS satın alıyor? .....
Robert Harvey

günlük yedekleme yapmak?
cırcır ucube

Sorunu çözmüyor - Git deposunun bir sunucuda olduğunu ve yerel bir repodan PUSH aldığınızı ve sunucudaki taahhüdümün özümlenmesinde enerji tekrar azaldığını hayal edin. Aynı sorun, ancak bu kez insan varlığı olmadan.
Luis Masuelli

Yanıtlar:


10

Git'in kesin zamanlanmış elektrik kesintilerinde hayatta kalmasını sağlamanın bir yolu olup olmadığını bilmiyorum, ancak deponuzu düzeltebilirsiniz.

Git nesnelerinin değişmez olması gerekiyordu, bu nedenle tüm eski taahhütleriniz hala geçerli olmalı. Bu cevaba göre , .git/refs/heads/<branch-name>üzerinde çalıştığınız branşın başını önceki taahhüdünüzde değiştirmek için hash'i değiştirebilirsiniz (içinde görebilirsiniz .git/logs/HEAD).

Bu cevaba yapılan yorum, bu yöntemin "Depoyu hala bozuk durumda bırakıyor, ancak bu kurtarmaya izin veriyor" olduğunu söylüyor. Bunu test etmedim (durumunuzu nasıl çoğaltacağımı bilmiyorum), ancak kurtarma işleminin git gcbozulduğunu, bozuk işlemi sileceğini düşünüyorum.


6
"durumunuzu nasıl çoğaltacağınızı bilemiyorum" Fişi çekin mi? ;)
yannis

3
@YannisRizos Belki bu SVN ise, ama Git taahhütleri insan zamanlama yetenekleri için çok hızlı ...
Idan Arye

5
Git açık kaynaktır, değil mi? Böylece sorunu yeniden oluşturmak için, kodu oluşturun, veriler diske kaydedilmeden önce bir kesme noktası ayarlayın - ve ardından fişi çekin.
John Saunders

10

Git'in depolama sistemi işlemsel değil, bu yüzden kesinlikle bir donanım probleminin işleri tutarsız bir durumda bırakması ihtimali var. Öte yandan, Git de çok hızlıdır, bu nedenle “elektrik kesintisi” türündeki problemlerden etkilendiğiniz için şanssız olmanız gerekir (diskteki sistematik problemler başka bir şeydir). Hız, kısmen işlemsel olmadığı gerçeğinden kaynaklanıyor; işlemler gerçekten oldukça pahalıdır, çünkü diskten verileri yazdığını onaylamak için beklemek zorundadırlar. (Veritabanları her türlü şeyi bu maliyeti gizlemeye çalışmak, ama sonuçta yine de bedel ödemek. Rakip DVCSes bazıları şunlardır işlemsel ve evet, onlar biraz daha yavaş Git gibi aynı donanım üzerinde konum.)

En kötü durumda - tamamen felaketli bir disk arızası (gerçekleştiğini gördüm) - DVCS'nin kurtarması için tek yol dağıtılmış olduğu gerçeğini kullanmaktır.. Değişikliklerinizi çok yakın bir zamana kadar başka bir sisteme zorladıysanız ve bunları birçok farklı ana bilgisayarla paylaştıysanız, kurtarma yalnızca bu diğer yerlerden birini artefakt kaynağı olarak kullanmaktan ibarettir, şubelerinizi çekmek için bir yer ( geçici olsa bile). Bunun gibi ilginç dalların geçmişini geri çekeceksiniz ve çok hızlı bir şekilde tekrar çalışmaya başlayabileceksiniz; Deponuzun bir çok dağıtılmış kopyasını bir kerede silen herhangi bir şey, daha sonra programlama konusunda endişelenmediğiniz bir felakettir (büyük göktaşı etkisini düşünün) veya doğrudan düşman hareketidir. (Bu tür düşmanları yapmamaya çalışın…) Bu, her şeyi barındıran merkezi sunucuyu kaybetmenin ölümcül bir darbe olduğu dağıtık olmayan sistemlerin tam aksine.


5
Şubelerinizi zorlamazsanız, yedek tutmaya devam etmeyin ve KGK yoksa, sadece donanım sorunları hepsini sildiğinde suçlama hakkınız vardır.
Araçlara

1
Git işlemlerinin işlemsel olmasını sağlamak için herhangi bir yöntem veya eklenti yok mu? Eğer böyle bir seçenek ya da eklenti mevcut olsaydı, onların (yani operasyonların) yavaş olmalarını umursamazdım. Neyse ki donanım sorunlarım yok. Ne yazık ki bu binada enerji sık sık kesiliyor (iki haftada bir kez kendi varlığı var diyerek) ve sürekli olarak kodluyorum ve UPS kullanmıyorum. Neyse ki ben github için remoted (klonladı / itti). Ne yazık ki, her şeyi geri almak ve projeyi tekrar kopyalamak zorunda kaldığımda biraz zaman kaybediyorum.
Luis Masuelli,

2
Çalışırken sık sık elektrik kesintileri olması, donanıma zarar vermemeniz durumunda dosya sisteminin bozulma riskini gerçekten artırdığınız anlamına gelir. Neden bir UPS alma fikrini eğlenmediğinizi merak ediyorum, bu da yaşadığınız sorunların çoğunu çözecektir ve muhtemelen en iyi cevap olacaktır.
Bart Silverstrim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.