اولین مخزن شما، قدم به قدم
ساختن مخزن، ذخیرهٔ نسخهها، دیدن تاریخچه و برگرداندن اشتباهها، با توضیح همهٔ مفاهیم.
دنبال فرمانی برای اجرا بگردید…
ساختن مخزن، ذخیرهٔ نسخهها، دیدن تاریخچه و برگرداندن اشتباهها، با توضیح همهٔ مفاهیم.
در این راهنما یک پروژهٔ کوچک را از صفر میسازیم. در طول راه، چهار مفهومی را یاد میگیرید که همهٔ zev بر آنها بنا شده است: پوشهٔ کاری، ناحیهٔ مرحلهبندی، کامیت و تاریخچه.
اگر هنوز zev را نصب نکردهاید، از نصب شروع کنید.
mkdir notescd noteszev initInitialized empty Zev repository in ./.zev/مخزن (repository) پوشهای است که zev تاریخچهاش را نگه میدارد. همهٔ این تاریخچه در پوشهٔ پنهان .zev است. آن را دستی ویرایش نکنید؛ اگر پاکش کنید، پوشه دوباره پوشهای معمولی میشود و تاریخچه از بین میرود.
نام و ایمیلتان را برای هر پروژه یک بار تنظیم کنید. اینها روی همهٔ کامیتهایتان مینشینند:
zev config set user.name "سارا احمدی"zev config set user.email "sara@example.com"خوب است این سه جا را در ذهن داشته باشید:
| جا | چیست | چطور چیزی به آن میرسد |
|---|---|---|
| پوشهٔ کاری | فایلهایتان، همانطور که در ویرایشگر میبینید | خودتان ویرایششان میکنید |
| ناحیهٔ مرحلهبندی | تغییراتی که برای کامیت بعدی انتخاب کردهاید | zev add |
| تاریخچه | همهٔ کامیتهایی که ساختهاید، برای همیشه ذخیرهشده | zev commit |
هیچ چیزی تصادفی به تاریخچه نمیرسد. خودتان انتخاب میکنید چه چیزی مرحلهبندی شود و بعد آن را کامیت میکنید.
دو فایل بسازید:
echo "خرید شیر" > todo.txtecho "ایدههای پروژه" > ideas.txtاز zev بپرسید چه میبیند:
zev statusOn branch mainUntracked files: (zev add <file> to start tracking; list in .zevignore to hide) ideas.txt todo.txtUntracked یعنی zev فایلها را میبیند اما هنوز تاریخچهشان را نگه نمیدارد. هر دو را مرحلهبندی و کامیت کنید:
zev add .zev commit -m "شروع یادداشتها" added ideas.txt added todo.txtStaged 2 change(s). Next: zev commit -m "what you changed"Created commit: 5f7f5e226bb19014179575681efba0f8be95eb6a8e64c1fc7dbc6f4d68224d01Committed 2 file(s)آن رشتهٔ طولانی شناسهٔ کامیت است: اثر انگشتی (هش) از همهچیزِ آن کامیت، که هرگز با کامیت دیگری اشتباه گرفته نمیشود. همیشه کافی است چند نویسهٔ اولش را بنویسید، مثلاً 5f7f5e22.
پیام خوب کامیت در چند کلمه میگوید چه چیزی و چرا تغییر کرد. «رفع ورود وقتی رمز فاصله دارد» بعدها خیلی مفیدتر از «رفع» است.
یک فایل را تغییر دهید و یکی تازه بسازید:
echo "خرید نان" >> todo.txtecho "تماس با علی" > calls.txtzev statusOn branch mainChanges not staged for commit: (zev add <file> to include them; zev restore <file> to throw them away) modified: todo.txtUntracked files: (zev add <file> to start tracking; list in .zevignore to hide) calls.txtخطهای تغییرکرده را ببینید:
zev diffmodified: todo.txt@@ -1,1 +1,2 @@ خرید شیر+خرید نان+ خطی است که اضافه شده و - خطی که حذف شده. خط @@ -1,1 +1,2 @@ جای تغییر در فایل را نشان میدهد؛ اول کار میتوانید نادیدهاش بگیرید.
حالا فقط todo.txt را کامیت کنید و calls.txt را برای بعد بگذارید:
zev add todo.txtzev diff --stagedzev commit -m "نان به فهرست اضافه شد"zev diff --staged دقیقاً نشان میدهد کامیت بعدی چه چیزی خواهد داشت. عادت خوبی است که پیش از کامیت آن را ببینید.
zev logcommit 8a41c2d0…Author: سارا احمدی <sara@example.com>Date: 2026-10-04 09:25 UTC نان به فهرست اضافه شدcommit 5f7f5e22…Author: سارا احمدی <sara@example.com>Date: 2026-10-04 09:20 UTC شروع یادداشتهاتازهترین کامیت بالاست. نمای کوتاهتر، هر کامیت در یک خط:
zev log --onelineبرای دیدن یک کامیت و همهٔ تغییراتش:
zev show 5f7f5e22 # با اول شناسهاشzev show HEAD # تازهترین کامیتzev show HEAD~1 # کامیتِ پیش از آنHEAD یعنی «کامیتی که الان روی آن هستید». HEAD~1 یکی پیش از آن است، HEAD~2 دو تا پیشتر، و همینطور.
همه اشتباه میکنند. راه خروج از اشتباههای رایج اینهاست.
دور ریختن تغییراتی که مرحلهبندی نکردهاید (برگشت به نسخهٔ آخرین کامیت):
zev restore todo.txtمراقب باشید: تغییراتی که دور میریزید برای همیشه میروند، چون هرگز کامیت نشده بودند.
خارج کردن فایل از مرحلهبندی (ویرایشها میمانند، اما فایل در کامیت بعدی نمیرود):
zev restore --staged todo.txtکنار گذاشتن موقت تغییرات (مثلاً برای اینکه با پوشهای تمیز چیز دیگری را ببینید):
zev stashzev stash pop # برگرداندنشانبرگرداندن فایلی که اشتباهی پاک کردهاید (اگر قبلاً کامیت شده بود):
zev restore calls.txtموقعیتهای بیشتر، مثل حذف و تغییر نام فایل، در چطور…؟ آمدهاند.
برای حذف یک فایل و ثبت آن در کامیت بعدی:
zev rm ideas.txtzev commit -m "حذف ایدهها"حذف فایل از هر راه دیگری هم درست است؛ بعد zev add ideas.txt (یا zev add .) حذف را مرحلهبندی میکند.
برای تغییر نام، فایل را عادی تغییر نام دهید و هر دو نام را مرحلهبندی کنید:
mv calls.txt phone.txtzev add calls.txt phone.txtzev commit -m "تغییر نام calls به phone"خروجی ساخت، لاگها و رازها جایشان در تاریخچه نیست. آنها را در فایلی به نام .zevignore در پوشهٔ اصلی پروژه فهرست کنید:
# .zevignorenode_modules/build/*.log.envفایلهای نادیدهگرفتهشده در zev status نمیآیند و zev add . از آنها میگذرد. خود .zevignore را کامیت کنید تا همهٔ کسانی که روی پروژه کار میکنند همان فایلها را نادیده بگیرند.