Eski sürümün zaten durabileceği dört yer
Bir şey kurmadan önce, Mac'inizin aradığınız dosyayı hâlihazırda tutuyor olabileceği dört yere bakın. Her biri farklı ve dar bir durumu kapsıyor, ve hangisinde olduğunuzu anlamak işin çoğu.
Uygulamanın içindeki Dosya > Şuna Dön. macOS yıllardır belge sürümlemesini
kendi içinde taşıyor, ve bunu benimseyen bir uygulamada
Dosya > Şuna Dön > Tüm Sürümlere Göz At menüsü çıkıyor: o tek belgenin geçmiş
kayıtları bir zaman çizgisinde. TextEdit, Önizleme, Pages, Numbers ve Keynote'ta
var. İnsanların gerçekten içinde çalıştığı şeylerin çoğunda yok: hiçbir Adobe
uygulamasında, hiçbir Office uygulamasında, bir betiğin yazdığı hiçbir dosyada.
Time Machine. Otomatik Olarak Yedekle açıksa macOS başlangıç diskinin yerel bir APFS anlık görüntüsünü kabaca saatte bir alıyor ve 24 saat saklıyor, artı son başarılı yedeğin bir görüntüsünü. İşe yarayıp yaramayacağını iki sınır belirler: çözünürlük bir kayıt değil bir saat, ve bir günden eskisi ancak yedek disk takılıysa var.
Bulut klasörünüzün sürüm geçmişi. Dropbox Basic ve Plus'ta 30, Professional'da 180 gün sürüm tutuyor. Google Drive bir sürümü 30 gün ya da 100 yeni sürüm birikene kadar saklıyor, Sonsuza dek sakla demediyseniz. iCloud Drive burada tuhaf olan: 30 günlük Son Silinenler, sildiğiniz dosyaları geri getiriyor, üzerine yazdığınız sürümleri değil. Üçü de tam olarak tek bir klasörü, eşitlenen klasörü kapsıyor.
Uygulamanın kendi otomatik kaydı. Bakmaya değer, güvenmeye pek değmez. O bir geri al, ve geri al süreçle birlikte ölür.
Bunlardan biri dosyanızı tutuyorsa okumayı bırakın. Aşağısı hiçbirinin kapsamadığı durum için: eşitlenmeyen bir klasör, sürüm menüsü olmayan bir uygulamayla düzenlenmiş, bir saatten önce bozulmuş, ya da tek dosyada değil aynı anda birkaçında bozulmuş. Retrace tam bu durum için yazılmış yerel bir macOS uygulaması, ve aşağıdaki her şey yayınlanan sürümde var.
Geçmişi açmak bir sağ tık

Finder'da bir klasöre sağ tıklıyorsunuz, History'yi seçiyorsunuz ve açıyorsunuz. Varsayılan klasör yok, içinde avlanacağınız bir seçici yok, ayarlanacak başka bir şey yok. Kapatmak için tekrar sağ tık.
History altında beş öğe var, üç öbek hâlinde: açıp kapatmak, tıkladığın şeye davranmak - bu klasörün anlık görüntüsünü al, bu dosyanın önceki sürümünü geri getir - ve uygulamayı açmak. Hepsi her zaman var ve her zaman bu sırada; o an işlevsiz olan kaldırılmıyor, soluklaştırılıyor. Böylece hareket her seferinde aynı hareket oluyor. Menü neye baktığını da böyle söylüyor, ikinci bir gösterge olmadan: anlık görüntü yalnızca beklemeye alınmış bir klasörde, geri getirme ise yalnızca bir dosyada etkin.
Menünün arkasında App Sandbox içinde kalmanın tek gerçek bedeli duruyor. Bir Finder eklentisi sağ tıkladığınız yolu verebilir, başka bir şeyi veremez, çünkü başka bir süreçten gelen bir yol izin demek değildir. Bu yüzden ilk çalıştırma ana klasörünüz için bir kez izin istiyor ve o izni saklıyor; sonrasında menü doğrudan çalışıyor. İzin vermezseniz aynı işlem bir klasör seçici açıyor.
İzlenen bir klasörün ihtiyacı olan diğer şey, hâlâ izlendiğinin kanıtı. Güvenlik kapsamlı bir izin sessizce çözülmez hâle gelebiliyor - bir birim kayboluyor, bir işletim sistemi güncellemesi bir grup yer imini geçersizleştiriyor - ve macOS'ta bunu bildiren hiçbir şey yok; akış öylece durmayı bırakıyor. Bütün vaadi "bunu kaybetmeyeceksin" olan bir uygulamada bu bir çökmeden kötü, o yüzden her klasör belirli aralıklarla yeniden çözülüyor ve gerçek bir test okumasından geçiyor; kayıt yapmayı bırakmış olan da listede iyi görünmek yerine bunu söylüyor.
Her şeyin bir kopyasını tutmak neden bedava
APFS'te copyfile, COPYFILE_CLONE ile birlikte kopyalarken yazma sırasında
kopyalayan bir klon üretiyor: özgün dosyanın veri bloklarını paylaşan yeni bir
dosya. Oluşturulması yaklaşık sıfır bayt ve mikrosaniyeler tutuyor - 64 MB'lık
bir klon 0,1 ms civarında ölçülüyor ve kendine ait sıfır bayt bildiriyor - ve bir
uygulamanın kaydedebileceği iki yolun da altında doğru bir anlık görüntü olarak
kalıyor. Dosyayı yerinde yeniden yazan bir düzenleyici taze bloklar ayırıyor ve
eskileri klona bırakıyor; atomik kaydeden bir düzenleyici klonun hiç bağlı
olmadığı yepyeni bir dosya yazıyor.
Bir sabit bağın (hardlink) sahip olmadığı özellik tam olarak bu, ve klasik sabit bağ ağacı yaklaşımının neden seçenek olmadığı da bu: sabit bağ aynı dosyadır, yani yerinde yazan bir uygulama sakladığınızı sandığınız sürümü sessizce yeniden yazar.
Yakalamak bedava olduğu için Retrace bol bol yakalıyor ve yakalamanın sayılıp sayılmayacağına sonradan bir içerik özeti karar veriyor. Bedava olmayan şey saklamak, ve özgün dosya klondan uzaklaştıkça klon pahalılaşıyor. Bu yüzden uygulamanın gösterdiği rakam, geçmişi silmenin gerçekten boşaltacağı yer; kâğıt üzerinde sürümlerin toplamı değil: tek bir 40 MB'lık dosyanın otuz klonu naif ölçüyle 1,2 GB, gerçekte 40 MB.
Klonlama uygulamanın değil birimin bir özelliği, ve HFS+ ya da exFAT biçimli bir harici disk bunu hiç yapamıyor. Retrace baştan bakıyor ve her yakalamayı sessizce tam kopyaya çevirmek yerine klasörü geri çeviriyor.
Bir dosyanın yazılmasının bittiğini anlamak
macOS'ta bunu düzgün cevaplayan hiçbir şey yok. Cevaplayacak olan sinyal - Endpoint Security'nin "bir süreç bu dosyayı yazmayı bitirdi"si - Apple'ın vereceği bir yetki istiyor, sandbox ile bağdaşmıyor ve Mac App Store'da kabul edilmiyor. Başka bir sürecin dosyayı hâlâ açık tutup tutmadığını sormanın da bir yolu yok.
Yani bu katmanlı bir tahmin, ve katmanların yanılmasına izin var, çünkü onlar yalnızca ne zaman bakılacağına karar veriyor. Bakışın sayılıp sayılmayacağına sonrasında özet karar veriyor. Dosya başına on saniyelik bir sessizlik, tek bir düzenleme oturumunun otomatik kayıt yağmurunu tek bir sürüme indiriyor - on, VS Code'un kendi yerel geçmişinin kullandığı sayı: bir yağmuru birleştirecek kadar uzun, bir dakika arayla yapılmış iki bilinçli kaydı iki sürüm bırakacak kadar kısa. Sonra bir kararlılık yoklaması boyut, değiştirilme tarihi ve inode'un üçünün de durduğuna bakıyor; sıfır uzunluk koruması yazarken kesilen bir kırpmayı, karantina kontrolü de daha inmemiş bir indirmeyi yakalıyor. Bir dosyayı değiştirmeden kaydedin, hiç sürüm çıkmıyor.
Ne zamanını sen söylemek istediğinde

Her kaydı almak bir tez klasöründe doğru, seksen gigabaytlık bir render klasöründe yanlış. Bu yüzden ayar uygulamanın değil, klasörün ayarı. Beklemesi söylenen klasör olay akışından çıkıyor ama iznini açık tutuyor, böylece sen istediğin anda dolaşılabiliyor - ve tek bir dolaşmanın sakladığı her şey aynı anı paylaşıyor. Bilinçli bir eylem zaman çizelgesine dört yüz değil, tek bir an olarak düşüyor.
İstemenin üç yolu var. Klasörün kendi ekranında bir anlık görüntü düğmesi var, kaydetme gibi Cmd-S'te. Finder'ın History alt menüsü Take a Snapshot Now diyor. Ctrl-Opt-Cmd-S ise hangi uygulamadaysan onun üstüne küçük bir panel çıkarıyor, ana bir isim alıyor, bekleyen bütün klasörleri kaydediyor ve çekiliyor. Eşi Ctrl-Opt-Cmd-R geçmiş penceresini açıyor: Retrace'in menü çubuğu öğesi ve Dock simgesi yok, dolayısıyla içeri dönüş yolu bir kısayol. İkisi de Ayarlar'dan değiştirilebiliyor ve ikisi de bilerek üç değiştirici taşıyor - çakışmayı kaybeden bir global kayda macOS hiçbir şey söylemiyor, yani bir varsayılanın tek savunması kimsenin uzanmayacağı bir kombinasyon olmak.
Budama bir anlık görüntüyü yaşına bakarak hiç inceltmiyor. Yalnızca istendiğinde kaydeden bir klasörde zaten tek sürüm onlar.
Üstüne yazmayı düzenlemeden ayırmak
Finder'da bir dosyanın üstüne sürüklenen bir dosya ile kendi editörünün kaydettiği bir dosya, macOS'un sunduğu her API'ye birebir aynı görünür. İkisi de yolda bir dosya bırakır, ikisi de yeni bir inode üretir - atomik kayıt geçici bir dosyayı hedefin üstüne taşır, Finder'ın Replace'i de bir kopyayı tam aynı şekilde taşır - ve ikisi de aynı dosya sistemi olaylarıyla gelir. Olayın kendisi hangisi olduğunu söylemez.
Onları ayıran tek şey, dosyanın kendi değiştirilme tarihidir. Bir yola yazılan byte'lar olayın bildirdiği anı taşır; başka yerde üretilip oraya taşınanlar ise yazıldıkları yerdeki tarihi taşır. Yani test şudur: byte'lar, kendilerini haber veren olaydan eski mi? İki dakikalık pay ile - büyük bir dosyanın yakalanmadan önce meşru olarak bekletilebileceği en uzun süreyi rahatça aşan bir pay.
Bu; Finder replace'ini, bir belgenin üstüne açılan arşivi, cp -p'yi, rsync'i,
sunucudaki kopyayı indiren eşitlemeyi, yedekten geri almayı yakalar. -p olmadan
cp'yi ve tarayıcı indirmesini yakalamaz - ikisi de o anki saati damgalar - ve
bilerek yakalamıyor: her alternatif (önceki byte'ları hash'lemek, içerik
karşılaştırmak, format koklamak) kat kat pahalı ve kendi yanlışlarını taşıyor.
Neyin saklanacağına karar veren bir işaret için doğru hata yönü, az iddia
etmektir.
Bunun on saniyelik pencereye de bir etkisi var: yerleştirilen bir dosya pencereyi beklemez. Pencere, tek bir dosyanın otomatik kayıt salvosunu tek sürüme katlamak için var; bir bırakma ise salvo değil - orada bekletmek, tam olarak ikinci bir bırakmanın birincisinin üstüne inmesine ve ikisinin tek sürüm olarak dosyalanmasına yarar.
Gördüklerin: klasör listesi her klasörde kaç dosyanın üstüne bir şey konduğunu gösterir, dosya listesi o satırları işaretler ve yalnızca onlara indiren bir anahtar taşır, zaman çizelgesinde de o an dosyanın düzenlendiğini değil üstüne yazıldığını söyler. Gerisini bekletme kuralları devralır - üstüne yazılanın altındaki sürüm, başka ne inceltilirse inceltilsin otuz gün tutulur; çünkü bir yıl önce yazılıp bu sabah gömülen bir belge, insanın bu uygulamayı tam da geri almak için açtığı kopyadır.
Klasörü geri sarmak, ve geri sarmayı geri almak

Yoğun bir klasör, birleştirme penceresi işini yaptıktan sonra bile günde yüzlerce yakalama anı üretiyor, o yüzden zaman çizgisi bunları katlıyor. Bir dakikadan yakın anlar tek bir an - aynı yarım dakikada dört belge kaydetmek yaptığınız dört şey değil, bir şey - ve 45 dakikadan uzak anlar yeni bir oturum başlatıyor. Her an içinde değişen dosyaları listeliyor.
Geri sarmak bütün klasörü o anlardan birine götürüyor. Hiçbir şeye dokunulmadan önce her yol denetleniyor, çünkü yarısına izin verilip yarısı reddedilen bir plan hiç çalışmamalı: siz bir durum istediniz, o durumun çoğunu değil. Sonra geri sarmanın dokunacağı her şeyin o anki hâli yakalanıyor, ve "beni yine şimdiye getir"in bütün cevabı bu adım.
Bunun iki yarısı da zaman çizgisinde kalıyor. Yapılan işin kendi satırı oluyor ve nereye gidildiğini söylüyor - "13.15 hâline döndün" - bıraktığınız durum da onun hemen öncesinde kendi noktasını alıyor; ikisi de etrafındaki işin içine katlanmıyor. Geri sarma bittiğinde dönüş yolu zaten seçili ve planı kurulmuş oluyor, yani "bu da değilmiş" tek bir basış, ve şerit kapandıktan ya da uygulama yeniden açıldıktan sonra da orada duruyor. Burada geri alma ayrı bir mekanizma değil, o noktaya geri sarmak; ve zaman çizgisindeki her şey kadar geri alınabilir. Klasörün şu an hangi hâli tuttuğunu gösteren satır etiketlenmek yerine farklı çiziliyor, yani nerede olduğunuz çıkarılacak değil görülecek bir şey; ondan sonraki ilk kayıt da onu klasörle birlikte ileri taşıyor.
Geri sarmanın kaldırdığı dosyalar silinmek yerine Çöp Sepeti'ne gidiyor; kendi kaldırdıkları yüzünden boşalan klasörler de, en derinden başlayarak, öyle ki hedeften sonra kurulmuş bir ağaç bütün olarak toplanıyor - içinde Retrace'in hiç yakalamadığı bir şey duran klasör olduğu yerde kalıyor, çünkü bir geri sarma geri koyamayacağı şeyi asla alıp götürmemeli. Yazılamayan bir dosya da gerisini iptal etmiyor: hatalar toplanıp raporda adıyla söyleniyor. On iki işin on birini sessizce yapan bir geri sarma, yapamadığını söyleyenden kötüdür.
Neyin değiştiğini gördükten sonra tek bir dosyayı geri koymak

Kurtarmaların çoğu tek bir dosya, ve onlar için klasör yanlış birim. Her satır kaç sürüm tuttuğunu ve en son ne zaman değiştiğini söylüyor, ve sağ tıklamak dosyanın kendisine ulaşıyor: Finder'da göster, ya da aç. Tek bir sürüm yerinde geri konabiliyor, ya da önce karşılaştırmak isterseniz özgün dosyanın yanına numaralı bir kardeş olarak yazılabiliyor. Yerinde geri koymak, üzerine bir şey yazmadan önce mevcut dosyayı bir sürüm olarak yakalıyor; düğmeyi basılabilir kılan da bu. Dosyanın zaten tuttuğu sürüm ise hiç önerilmiyor, bunun yerine öyle olduğunu söylüyor.
Karşılaştırma biçime göre değişiyor, çünkü "ne değişti"nin her birinde farklı ve işe yarar bir cevabı var. Metin satır satır karşılaştırılıyor. Görsellerde kaydırmalı bir ayraç, soğan zarı geçişi, ve sonucu güçlendirip sahte renklendiren bir fark kipi var; çünkü neredeyse aynı iki görselin ham fark karışımı, içinde bir nokta olan siyah bir kare. PDF ise her sayfanın metni özetlenerek karşılaştırılıyor: bu, her yeniden dışa aktarmanın ürettiği nesne sırası değişikliğine dayanıyor - bayt karşılaştırması bütün dosyaya değişti derdi - ve insanların gerçekten sorduğu çözünürlükte, yani "3. ve 7. sayfalar" diye cevap veriyor.
Bilerek yapmadıkları
Bu bir yedekleme değil. Geçmiş klasörle aynı diskte duruyor, yani bozulan bir sürücü ikisini birden alıyor. Bu, saatte bir yerine kayıttan saniyeler sonra yakalamanın bilinçli takası, ve Time Machine'in ya da site dışı bir kopyanın hâlâ işin diğer yarısı olmasının sebebi.
Eşitleme yok, iPhone uygulaması yok, hesap yok, ve ağ kapalıyken çalışıyor. Yalnızca bulutta duran dosyalar indirilmek yerine atlanıyor, böylece boşaltılmış yer tutucularla dolu bir klasörde geçmişi açmak gigabaytları sessizce diske geri çekemiyor.
Bazı ağaçlar varsayılan olarak dışarıda: node_modules, DerivedData ve
.build yeniden üretildikleri için, .git ve .svn zaten birer sürüm geçmişi
oldukları için, fotoğraf ve video kitaplıkları da sürekli kendini yeniden yazan
gigabaytlarca veritabanı oldukları için. Her varsayılan görünür ve
düzenlenebilir, çünkü kötü bir hariç tutmadan kötü tek şey görünmez olanı.
Geçmiş sonsuza kadar büyümek yerine yaşla inceliyor: son 24 saatin tamamı, bir hafta saatlik, bir ay günlük, bir yıl haftalık; üstünde de asla silinmeyenler listesi - her dosyanın en yeni on sürümü, yıldızlanan her şey, artık var olmayan bir dosyanın son sürümü, üstüne yazılanın altında kalan hal (o andan sonraki otuz gün), ve bir geri sarmadan sonraki otuz gün boyunca onun dönüş yolu. Ad verdiğiniz bir an ise büsbütün saklanıyor, ve bir ana ad vermek orada bir geri sarmanın yazdığını asla silmiyor. Her klasörün bir disk bütçesi var ve eski sürümler ona karşı emekli oluyor.
Ne kadar ve başka neye bakmalı
Retrace macOS 14 veya sonrasını istiyor, Apple Silicon ve Intel'de çalışıyor ve yaklaşık 25 MB yer kaplıyor. Tek seferlik 8,99 dolar, ve 30 günlük denemesi ne kart ne e-posta istiyor. Tam künye Retrace sayfasında.
Bütün bunun arkasındaki soru aslında hangi yedekleme katmanının eksik olduğuysa, Mac için Time Machine alternatifleri bunun dökümü - sürüm geçmişi ile yedekleme ayrı işler ve çoğu insanın ikisine de ihtiyacı var. Asıl sorun disk hiçbirine yer bırakmayacak kadar doluysa, komşu uygulama Sweep: bir klasörü senin yazdığın kurallara göre düzenliyor - Mac'te dosyaları otomatik sıralamak - ve açtığı yer Mac'te disk alanı açmak yazısında.