مشکلی که کپی حل نمیکند
فصل قبل گفت کپی بگیر. حالا مشکلِ کپی: یک کپی، یک نسخه است. وقتی پنج بار پشت سر هم چیزی را عوض کردی و بار پنجم فهمیدی جواب درست همان بار دوم بود، کپی کمکت نمیکند — چون نسخهی بارِ دوم را نداری.
و راهحل معمولِ آدمها، بدترین راهحل است:
قرارداد-نهایی · قرارداد-نهایی-۲ · قرارداد-نهایی-واقعی ·
قرارداد-نهایی-واقعی-اصلاحشده
این هم تاریخچه است، ولی تاریخچهای که ترتیبش را نمیدانی، و نمیدانی هر نسخه چه فرقی با قبلی داشت.
git — که گیت خوانده میشود — همین را حل میکند: یک فایل، با تمام تاریخچهاش، بدون بیست کپی. اسمش را زیاد شنیدهای و احتمالاً بهعنوان «ابزار برنامهنویسها» شناختهای؛ بخش ۵.۲.۵ میگوید چرا این برداشت درست نیست.
نسخهها روی یک خط
مدل ذهنی git ساده است. هر بار که یک نسخه ثبت میکنی، یک نقطه روی یک خط اضافه میشود:
سه چیز که این تصویر میگوید و ارزش دقت دارند:
- نقطهها فقط اضافه میشوند. ثبتِ نسخهی ۴، نسخهی ۳ را پاک نمیکند.
- هر نقطه یک توضیح دارد — «بند مالی اضافه شد». همین
توضیح است که تاریخچه را قابل استفاده میکند، برخلاف
نهایی-۲. - برگشت، پرش است نه حذف. میروی به نسخهی ۲، و نسخهی ۴ هم سر جایش هست.
سه دستوری که کافی است
git ابزار بزرگی است و دهها دستور دارد. برای کاری که ما میکنیم، سه تا کافی است — و خبر خوب اینکه لازم نیست حفظشان کنی، چون میتوانی از ایجنت بخواهی انجامشان دهد. ولی باید بدانی چه کاری میکنند، وگرنه نمیفهمی داری چه چیزی را تأیید میکنی (فصل ۳.۳).
- وضعیت —
git status. «از آخرین ثبت تا الان، چه چیزی عوض شده؟» بیخطرترین دستور git؛ فقط نگاه میکند. - ثبت —
git add . && git commit -m "توضیح". یک نقطهی جدید روی خط. این همان لحظهای است که نسخه «محفوظ» میشود. در فارسیِ گفتاری به آن کامیت هم میگویند و اگر جایی «کامیت کن» شنیدی، منظور همین است. - برگشت —
git checkout <نسخه>. پرش به یک نقطهی قبلی.
بهخاطر بسپار git فقط چیزی را نگه میدارد که ثبت کردهای. تغییری که ثبت نشده، در تاریخچه نیست — و اگر رویش بنویسند، رفته. پس «git داریم» تنها وقتی محافظت است که قبل از کار جدی ثبت کرده باشی، نه بعدش.
ثبت، قبل از سپردن کار به ایجنت
این کل کاربرد git در این دوره است، در یک ترتیب:
- ثبت کن — یعنی «این وضعیتِ سالم است، به آن برمیگردم».
- کار را به ایجنت بسپار.
- راستیآزمایی کن (فصل ۴.۵).
- خوب بود؟ ثبت کن. بد بود؟ برگرد.
و چون قدم ۱ ده ثانیه است، هزینهی این محافظت تقریباً صفر است. آن چیزی که خطرناک بود — ندانستن اینکه چطور برمیگردی (فصل ۵.۱.۳) — حالا جواب روشنی دارد.
و یک فایدهی دوم که کمتر گفته میشود: وضعیت به تو نشان میدهد ایجنت دقیقاً چه چیزی را عوض کرد — نه آنچه گفت عوض کرد. این یکی از تمیزترین راههای راستیآزمایی است، چون از خودِ ایجنت نمیپرسی.
برای متن هم کار میکند
یک تصور غلط رایج: git «برای برنامهنویسها» است. نه — git برای فایل متنی است، و فایل متنی فقط کد نیست:
- خوب کار میکند: متن ساده، Markdown، CSV، فایلهای تنظیمات، HTML. برای اینها git میتواند دقیقاً بگوید کدام خط عوض شده.
- کار میکند ولی کور: Word، Excel، PDF، عکس. نگهشان میدارد و برگشت هم میدهد، ولی نمیتواند بگوید داخلشان چه عوض شده — فقط «این فایل عوض شد».
پس برای پوشهای پر از فایل Word هم git بیفایده نیست؛ فقط نصفِ فایدهاش را میدهد. و همین نصف — «برگرد به نسخهی سه ثبت قبل» — همان چیزی است که میخواستیم.
git status نشانت میدهد.
update. سه هفته بعد بیست نقطه داری که همهشان
«update» هستند، و عملاً برگشتی به هیچجا نداری چون نمیدانی کدام کدام است.
تمرین
در پوشهی زمین بازیات (فصل ۰.۹):
- از ایجنت بخواه git راه بیندازد و یک ثبت اولیه بزند.
- از او بخواه چیزی را در یکی از فایلها عوض کند.
- قبل از هر کار دیگری، وضعیت را ببین — و مقایسه کن با آنچه ایجنت گفت انجام داده.
- حالا برگرد به نسخهی اول و تأیید کن که فایل واقعاً به حال قبل برگشت.
پاسخنامه — نکتهی اصلی این تمرین کدام قدم است؟
قدم ۴. بقیهی قدمها را ممکن است انجام دهی و همچنان باور نکرده باشی که git کار میکند. تا وقتی با چشم خودت ندیدهای که یک تغییر واقعاً برگشت، git برایت یک ادعاست نه یک ابزار — و ابزاری که باورش نداری، در لحظهی ترس از آن استفاده نمیکنی.
و قدم ۳ نکتهی پنهانِ فصل است. اگر وضعیت چیزی نشان داد که ایجنت نگفته بود — یک فایل اضافه که فکر نمیکردی دست بخورد — همین الان یک راستیآزمایی واقعی انجام دادی، بدون اینکه از خودِ ایجنت بپرسی. این تمیزترین شکل «به گزارش خودش تکیه نکن» است (فصل ۴.۵).