منطق ایجنت‌ها › M5 — محافظت
۵.۲ پایدار تدریسی ~۳۵ دقیقه

git به‌عنوان دکمه‌ی بازگشت

قبل از این فصل: فصل ۵.۱

در یک نگاه

۵.۲.۱

مشکلی که کپی حل نمی‌کند

فصل قبل گفت کپی بگیر. حالا مشکلِ کپی: یک کپی، یک نسخه است. وقتی پنج بار پشت سر هم چیزی را عوض کردی و بار پنجم فهمیدی جواب درست همان بار دوم بود، کپی کمکت نمی‌کند — چون نسخه‌ی بارِ دوم را نداری.

و راه‌حل معمولِ آدم‌ها، بدترین راه‌حل است:

قرارداد-نهایی · قرارداد-نهایی-۲ · قرارداد-نهایی-واقعی · قرارداد-نهایی-واقعی-اصلاح‌شده

این هم تاریخچه است، ولی تاریخچه‌ای که ترتیبش را نمی‌دانی، و نمی‌دانی هر نسخه چه فرقی با قبلی داشت.

git — که گیت خوانده می‌شود — همین را حل می‌کند: یک فایل، با تمام تاریخچه‌اش، بدون بیست کپی. اسمش را زیاد شنیده‌ای و احتمالاً به‌عنوان «ابزار برنامه‌نویس‌ها» شناخته‌ای؛ بخش ۵.۲.۵ می‌گوید چرا این برداشت درست نیست.

۵.۲.۲

نسخه‌ها روی یک خط

مدل ذهنی git ساده است. هر بار که یک نسخه ثبت می‌کنی، یک نقطه روی یک خط اضافه می‌شود:

نسخه‌ها روی یک خط زمان چهار نسخه‌ی ثبت‌شده روی یک خط، از قدیمی‌ترین در راست تا آخرین در چپ. از نسخه‌ی آخر می‌توان به هر نقطه‌ی قبلی برگشت. قدیمی‌تر آخرین نسخه نسخه‌ی ۱ متن اولیه نسخه‌ی ۲ بند مالی اضافه شد نسخه‌ی ۳ بازنویسی کامل الان اینجایی نسخه‌ی ۴ اصلاح تاریخ‌ها هر وقت بخواهی، برگشت به نسخه‌ی ۲
هر ثبت، یک نقطه روی خط است. نقطه‌ها پاک نمی‌شوند — پس هر نسخه‌ی قبلی همیشه در دسترس می‌ماند.

سه چیز که این تصویر می‌گوید و ارزش دقت دارند:

۵.۲.۳

سه دستوری که کافی است

git ابزار بزرگی است و ده‌ها دستور دارد. برای کاری که ما می‌کنیم، سه تا کافی است — و خبر خوب اینکه لازم نیست حفظشان کنی، چون می‌توانی از ایجنت بخواهی انجامشان دهد. ولی باید بدانی چه کاری می‌کنند، وگرنه نمی‌فهمی داری چه چیزی را تأیید می‌کنی (فصل ۳.۳).

به‌خاطر بسپار git فقط چیزی را نگه می‌دارد که ثبت کرده‌ای. تغییری که ثبت نشده، در تاریخچه نیست — و اگر رویش بنویسند، رفته. پس «git داریم» تنها وقتی محافظت است که قبل از کار جدی ثبت کرده باشی، نه بعدش.

۵.۲.۴

ثبت، قبل از سپردن کار به ایجنت

این کل کاربرد git در این دوره است، در یک ترتیب:

  1. ثبت کن — یعنی «این وضعیتِ سالم است، به آن برمی‌گردم».
  2. کار را به ایجنت بسپار.
  3. راستی‌آزمایی کن (فصل ۴.۵).
  4. خوب بود؟ ثبت کن. بد بود؟ برگرد.

و چون قدم ۱ ده ثانیه است، هزینه‌ی این محافظت تقریباً صفر است. آن چیزی که خطرناک بود — ندانستن اینکه چطور برمی‌گردی (فصل ۵.۱.۳) — حالا جواب روشنی دارد.

و یک فایده‌ی دوم که کم‌تر گفته می‌شود: وضعیت به تو نشان می‌دهد ایجنت دقیقاً چه چیزی را عوض کرد — نه آنچه گفت عوض کرد. این یکی از تمیزترین راه‌های راستی‌آزمایی است، چون از خودِ ایجنت نمی‌پرسی.

۵.۲.۵

برای متن هم کار می‌کند

یک تصور غلط رایج: git «برای برنامه‌نویس‌ها» است. نه — git برای فایل متنی است، و فایل متنی فقط کد نیست:

پس برای پوشه‌ای پر از فایل Word هم git بی‌فایده نیست؛ فقط نصفِ فایده‌اش را می‌دهد. و همین نصف — «برگرد به نسخه‌ی سه ثبت قبل» — همان چیزی است که می‌خواستیم.

نکته‌ی طلایی از ایجنت بخواه در پوشه‌ی کارت git راه بیندازد و همین حالا یک ثبت اولیه بزند. سپس هر بار قبل از کار جدی فقط بگو «قبل از شروع، ثبت کن». لازم نیست دستورها را حفظ کنی — لازم است بدانی که این کار انجام شده، و git status نشانت می‌دهد.
ضدالگو «git راه انداختم، پس محافظت‌شده‌ام.» راه‌انداختن کافی نیست — ثبت نکردن یعنی تاریخچه‌ای خالی. و ضدالگوی دومش: ثبت با توضیح update. سه هفته بعد بیست نقطه داری که همه‌شان «update» هستند، و عملاً برگشتی به هیچ‌جا نداری چون نمی‌دانی کدام کدام است.

تمرین

در پوشه‌ی زمین بازی‌ات (فصل ۰.۹):

  1. از ایجنت بخواه git راه بیندازد و یک ثبت اولیه بزند.
  2. از او بخواه چیزی را در یکی از فایل‌ها عوض کند.
  3. قبل از هر کار دیگری، وضعیت را ببین — و مقایسه کن با آنچه ایجنت گفت انجام داده.
  4. حالا برگرد به نسخه‌ی اول و تأیید کن که فایل واقعاً به حال قبل برگشت.
پاسخنامه — نکته‌ی اصلی این تمرین کدام قدم است؟

قدم ۴. بقیه‌ی قدم‌ها را ممکن است انجام دهی و همچنان باور نکرده باشی که git کار می‌کند. تا وقتی با چشم خودت ندیده‌ای که یک تغییر واقعاً برگشت، git برایت یک ادعاست نه یک ابزار — و ابزاری که باورش نداری، در لحظه‌ی ترس از آن استفاده نمی‌کنی.

و قدم ۳ نکته‌ی پنهانِ فصل است. اگر وضعیت چیزی نشان داد که ایجنت نگفته بود — یک فایل اضافه که فکر نمی‌کردی دست بخورد — همین الان یک راستی‌آزمایی واقعی انجام دادی، بدون اینکه از خودِ ایجنت بپرسی. این تمیزترین شکل «به گزارش خودش تکیه نکن» است (فصل ۴.۵).

ذخیره شد