همهی ما حداقل یک بار با کپیکردن دستی فایلها، سعی کردیم تغییرات را مدیریت کنیم. اما این روش چه معایبی دارد و چطور میتوانیم بهترش کنیم؟
تا حالا شده روی پروژهای کار کنی که مدام در حال تغییر بوده؟ مثلاً یک گزارش، یک کد برنامه، یا حتی یک ویدیو. حتماً برایت پیش آمده که هر از گاهی یک کپی از کل کار بگیری، تا اگر مشکلی پیش آمد، بتوانی به نسخهی قبلی برگردی.
یا شاید در یک تیم کار میکردی و هر روز بخشی از کار را برای بقیه ایمیل میفرستادی، و بقیه هم تغییرات خودشان را اضافه میکردند و دوباره برای همه میفرستادند. یا در پروژهای پیچیده، مسیر کار مدام عوض میشد و حس میکردی ممکن است چیزهایی که امروز حذف میکنی، فردا دوباره به کار بیایند؛ پس قبل از هر حذف مهم، یک کپی کامل از همهچیز میگرفتی.
💡 اگر هر کدام از این کارها را انجام دادهای، یعنی از قبل با قدیمیترین شکل کنترل نسخه آشنا هستی: نگهداری کپیهای تاریخی.
بیایید مرور کنیم که معمولاً چطور این کار را انجام میدهیم:
پروژه_نسخه۱، پروژه_نسخه۲ و ...این روشها به ما اجازه میدهند:
پس اصل کار همان است که امروز در سیستمهای کنترل نسخه حرفهای مثل Git میبینیم؛ فقط روش انجامش تفاوت دارد.
اگرچه کپیگیری دستی میتواند مفید باشد، اما معایب بزرگی دارد که آن را برای پروژههای جدی ناکارآمد میکند:
به همین دلیل است که به این روش «ابتدایی» (primitive) میگوییم؛ چون خیلی دستی، غیردقیق و زمانبر است.
با وجود همهی این معایب، اصل کنترل نسخه همان چیزی است که ما به آن نیاز داریم: پیگیری تغییرات فایلها در طول زمان. فرقی نمیکند فایل ما کد باشد، تصویر، تنظیمات، یا حتی یک پروژهی تدوین ویدیو؛ مهم این است که بتوانیم:
سیستمهای کنترل نسخه حرفهای دقیقاً همین کار را انجام میدهند، اما به صورت خودکار، دقیق و با جزئیات کامل.
در حقیقت، ما فقط میخواهیم کنترل بهتری روی «کپیهای تاریخی» خود داشته باشیم. Git این کار را برایمان به شکلی حرفهای انجام میدهد.
Git یک سیستم کنترل نسخهی قدرتمند است که تمام مشکلات روش دستی را حل میکند:
در ادامهی دوره، با جزئیات بیشتری یاد میگیریم که Git چگونه این کارها را انجام میدهد.
⚠️ ممکن است در ابتدا با اصطلاحات جدیدی مثل commit، branch، merge و ... روبهرو شوی، اما نگران نباش؛ همهی اینها در نهایت به همان «کنترل بهتر روی کپیهای تاریخی» خلاصه میشوند.
در دنیای کنترل نسخه، اصطلاحات فنی زیادی وجود دارد. اما یادت باشد که همهی این اصطلاحات برای توصیف همان کاری هستند که قبلاً به روش دستی انجام میدادی:
همهی اینها در نهایت به ما کمک میکنند تا تاریخچهی تغییرات را به شکلی سازمانیافته و قابل اعتماد داشته باشیم. پس با خیال راحت وارد دنیای Git شو!
هر اصطلاح جدید فقط یک نام برای کاری است که قبلاً به سختی و بهصورت دستی انجام میدادی.
حالا فرض کن دو نسخه از یک فایل کد داری که در زمانهای مختلف تهیه شدهاند. چطور میتوانی آنها را با هم مقایسه کنی؟
در روش دستی، باید دو فایل را کنار هم بگذاری و خطبهخط بررسی کنی. اما در دنیای کنترل نسخه، ابزاری به نام diff (مخفف difference) وجود دارد که این کار را بهطور خودکار انجام میدهد. diff به تو نشان میدهد که دقیقاً کدام خطها تغییر کردهاند، اضافه شدهاند یا حذف شدهاند.
این ابزار بسیار مفید است، چون:
در ویدیوی بعدی، دقیقاً یاد میگیری که چطور از diff استفاده کنی و دو نسخه را با هم مقایسه کنی. پس آمادهی قدم بعدی باش!
در این جلسه فهمیدیم که نگهداری کپیهای تاریخی قدیمیترین شکل کنترل نسخه است و هرچند کاربردی، اما معایب بزرگی دارد. سیستمهای کنترل نسخه مانند Git این مشکلات را با ثبت خودکار تغییرات، ذخیرهی فقط تفاوتها و فراهم کردن شفافیت کامل حل میکنند. همچنین با اصطلاحات کلیدی آشنا شدیم و دیدیم که ابزار diff چطور به ما در مقایسهی دقیق فایلها کمک میکند.
🎉 با درک این مفاهیم پایه، آمادهی ورود به دنیای Git هستید. در جلسهی بعد، بهطور عملی با دستورات ابتدایی Git آشنا میشوید.