کنترل نسخه به زبان تصویر
کنترل نسخه چیست، و مخزن، کامیت، دیف، شاخه، ادغام، تعارض، ارسال، دریافت و درخواست ادغام چه هستند؛ با تصویرهایی که قدم به قدم پخش میشوند. بدون نیاز به تجربهٔ قبلی.
دنبال فرمانی برای اجرا بگردید…
کنترل نسخه چیست، و مخزن، کامیت، دیف، شاخه، ادغام، تعارض، ارسال، دریافت و درخواست ادغام چه هستند؛ با تصویرهایی که قدم به قدم پخش میشوند. بدون نیاز به تجربهٔ قبلی.
تازهکارید؟ از همینجا شروع کنید. هر ایدهی زیر اول یک تصویر دارد و بعد چند خط توضیح. تصویرهایی که قدمهای شمارهدار دارند خودشان پخش میشوند: برای دیدن دوباره ▶ را بزنید، یا روی یک قدم بزنید تا همانجا بماند. روی هر کامیت یا دستگاه بزنید تا توضیح بیشتری بخوانید.
نکته: لازم نیست فرمانها را از حالا حفظ کنید. اول تصویر را بفهمید. شروع سریع شما را در پنج دقیقه به نوشتنشان میرساند.
سامانهٔ کنترل نسخه (VCS) ابزاری است که هر نسخهای از پروژه را که بخواهید ذخیره کنید به یاد میسپارد، تا ببینید چه عوض شده، برگردید، و با دیگران کار کنید بیآنکه کار هم را پاک کنید. zev یک سامانهٔ کنترل نسخه است؛ Zaryn وبسایتی است که آنچه zev ذخیره میکند را در آن به اشتراک میگذارید.
نقطههای ذخیرهٔ یک بازی ویدیویی را در نظر بگیرید: پیش از بخش سخت ذخیره میکنید و اگر خراب شد، ذخیره را بار میکنید. کنترل نسخه به پروژهٔ شما نقطههای ذخیره میدهد، هر کدام با یادداشتی از کاری که کردید.
مخزن (repository یا repo) پوشهٔ پروژهای است که zev از آن مراقبت میکند. شبیه یک پوشهٔ معمولی پر از فایلهای شماست، بهاضافهٔ تاریخچهای پنهان از همهٔ نسخههایی که ذخیره کردهاید. با zev init در پوشهای که دارید، با zev new از صفر، یا با zev clone برای دانلود از Zaryn یکی میسازید.
چرا قدم میانی؟ فرض کنید یک باگ را درست کردهاید و صفحهٔ تازهای هم شروع کردهاید. zev add به شما اجازه میدهد فقط رفع باگ را در این نقطهٔ ذخیره بگذارید و صفحهٔ نیمهکاره را برای بعدی نگه دارید، تا هر نقطهٔ ذخیره یک تغییر روشن باشد. zev status هر لحظه میگوید در هر جا چه هست.
7f3a9c2. یک حرف را عوض کنید و عوض میشودکامیت یک نقطهٔ ذخیره است. کامیتها پشت سر هم میآیند و هر کدام به قبلی اشاره میکند، و این رشته تاریخچهٔ پروژهٔ شماست. ساختهشدن چندتایشان را ببینید:
هر نقطه یک کامیت است. برچسب بالای تازهترین کامیت نام شاخه، main، است که همیشه به آخرین کامیت شما میرود.
zev log تاریخچه را فهرست میکند؛ zev show یک کامیت را کامل نشان میدهد. چون هر کامیت یک عکس فوری کامل با اثر انگشت است، همیشه میتوانید هر کدام را دقیقاً همانطور که بود برگردانید، و هیچکس نمیتواند یک کامیت قدیمی را بیصدا عوض کند.
دیف تفاوت میان دو نسخه است: خطهای قرمز حذف شدهاند، خطهای سبز اضافه شدهاند، و خطهای ساده بیتغییرند تا جایتان را پیدا کنید. خطی که عوض شده یک قرمز و یک سبز نشان داده میشود. کنار هم را در بالا بزنید تا نسخهٔ قدیم و تازه را کنار هم ببینید.
zev diff آنچه را عوض کردهاید ولی مرحلهبندی نکردهاید نشان میدهد.zev diff --staged آنچه در ناحیهٔ مرحلهبندی است، یعنی کامیت بعدی، را نشان میدهد.zev show دیفی را که یک کامیت ساخت نشان میدهد.zev کد را هم میفهمد: دیف معنایی میگوید کی یک تغییر فقط کد را جابهجا یا قالببندی کرده، تا آنچه واقعاً عوض شده را بازبینی کنید.
شاخه رشتهای از کامیتهاست که نام دارد. هر مخزن با main شروع میشود. وقتی میخواهید چیزی را امتحان کنید، شاخه بسازید: کامیتهایتان روی آن میروند و main دقیقاً همانطور که بود میماند تا وقتی تصمیم بگیرید کار را بیاورید. با zev checkout <branch> میان شاخهها جابهجا شوید؛ فایلهایتان مطابق آن عوض میشوند. ببینید: شاخهها و ادغام.
وقتی شاخه آماده است، آن را در main ادغام میکنید. دو حالت هست.
اگر main جلو نرفته باشد، ادغام فقط نام main را تا تازهترین کامیت شاخه جلو میبرد (یک fast-forward):
اگر main هم جلو رفته باشد، zev کامیتهای تازهٔ خود main را روی کامیتهای شاخه برمیگرداند، تا تاریخچه یک خط صاف با کار هر دو طرف بماند:
اگر main و شاخهٔ شما همان خطها را عوض کرده باشند، zev نمیتواند حدس بزند کدام را میخواهید، پس میایستد و چیزی را عوض نمیکند. این یک تعارض است، و عادی است. آن را دستی درست میکنید:
zev merge new-search --resolve هر جا که هر دو طرف عوض کردهاند را علامت میزندzev merge --abort همهچیز را برمیگرداندادغام مکرر تعارضها را کوچک و کم نگه میدارد. راهنمای کامل در شاخهها و ادغام است.
رایانهٔ شما هم کل تاریخچه را دارد، پس بدون اینترنت میتوانید کامیت کنید، تاریخچه را ببینید و شاخه بسازید. فقط برای ارسال و دریافت به اتصال نیاز دارید. بیشتر در ارسال و دریافت.
درخواست ادغام (pull request یا PR) درخواست ادغام یک شاخه در شاخهای دیگر است، با فرصتی برای گفتوگو پیش از آن. دیف را نشان میدهد، بررسیهای CI را اجرا میکند و به همتیمیها اجازه میدهد روی هر خط نظر بدهند. وقتی همه راضیاند، کسی Merge را میزند (یا zev pr merge <number> را اجرا میکند). در پروژهٔ شخصی هم به کار میآید: یک PR فهرست بررسی پیش از زنده شدن کار شماست.
v1.0، برای انتشارها. zev tag v1.0zev stash، zev stash popzev restore <file>| واژه | در یک خط | فرمان |
|---|---|---|
| مخزن | پوشهٔ پروژه با کل تاریخچهاش | zev init، zev clone |
| کامیت | یک نقطهٔ ذخیره: عکس فوری، پیام، چه کسی و کی | zev commit -m "…" |
| ناحیهٔ مرحلهبندی | تغییرهای برگزیده برای کامیت بعدی | zev add |
| تاریخچه | همهٔ کامیتها، هر کدام اشارهگر به قبلی | zev log |
| دیف | آنچه میان دو نسخه عوض شد، قرمز و سبز | zev diff |
| شاخه | رشتهٔ نامدار کامیتها برای کار جدا | zev checkout -b <name> |
| ادغام | آوردن کار یک شاخه به شاخهٔ دیگر | zev merge <branch> |
| تعارض | هر دو طرف همان خطها را عوض کردهاند؛ شما انتخاب میکنید | zev merge --resolve |
| کلون / ارسال / دریافت | دانلود / فرستادن / گرفتن کامیتها از Zaryn | zev clone، zev push، zev pull |
| درخواست ادغام | درخواست بازبینی پیش از ادغام | zev pr |
| برچسب | نامی ثابت برای یک کامیت، برای انتشار | zev tag |
آمادهاید؟ شروع سریع را دنبال کنید، فهرست واژهها را دم دست نگه دارید، و هر جا گیر کردید چطور…؟ جوابهای کوتاه دارد.