دنبال فرمانی برای اجرا بگردید…
تاریخچهٔ یک مخزن zev از سه نوع شیء ساخته میشود:
هر کدام از اینها با هش محتوای خودش شناخته میشود، همانطور که در ذخیرهسازی با نشانیدهی محتوایی آمده است.
در کلاینت، اشیا در .zev/objects/ قرار دارند؛ هر کدام با zstd فشرده و با هش SHA-256 خودش نامگذاری میشود. ارجاعها (اشارهگرهای نامدار به کامیتها، مثل سر شاخهها) در .zev/refs/ هستند.
در سرور، اشیا روی دیسک در مسیری قرار دارند که بر پایهٔ دو نویسهٔ اول هش BLAKE3 آنها بخشبندی شده است (تا هیچ پوشهای تعداد نامعقولی فایل نداشته باشد)، و در کنارشان جدولهای PostgreSQL نگه میدارند هر شیء به کدام مخزن تعلق دارد. برای فایلهای قطعهبندیشده هم یک پوشهٔ موازی manifests هش کل فایل را به فهرست مرتب هش قطعههایش نگاشت میکند.
یک ارسال فقط اشیا را بارگذاری نمیکند؛ مانیفستی هم بارگذاری میکند که آنها را توصیف میکند: یک سند JSON که برای هر شیء در تاریخچهٔ ارسالشده، local_hash آن (هویت SHA-256 در کلاینت) و server_hashی را که واقعاً با آن ذخیره شده (BLAKE3) فهرست میکند. خود این مانیفست بهصورت یک ارجاع (manifest/<branch>) ذخیره میشود و سابقهای ماندگار و قابل بازپخش به سرور میدهد از اینکه یک ارسال دقیقاً کدام اشیا را آورد و دو هویتشان چگونه با هم متناظرند.
مدل اشیا در طول توسعهٔ zev دو بار گسترش یافت (یک بار برای فشردهسازی و یک بار برای قطعهبندی) و در هر دو بار گسترش به شکلی افزایشی ساخته شد. فشردهسازی شیوهٔ نگهداری بایتها روی دیسک را تغییر داد، بیآنکه آنچه یک هش شناسایی میکند تغییر کند. قطعهبندی راه دیگری برای سرهمکردن بایتهای یک فایل افزود، بیآنکه هش خود فایل عوض شود یا خوانندههای موجود اصلاً لازم باشد از وجود قطعهبندی خبر داشته باشند.