مقدمه
گیت اگر خوب نبود ۹۷ درصد برنامه نویسا ازش استفاده نمیکردن، الان که نویسنده ها و دیزاینر های و … هم دارن تو پروژه هاشون از گیت یا یه چیز شبیهش استفاده میکنن
کی درستش کرده ؟ اقای لینوس تروالدز همونی که لینوکس رو درست کرده ، فکرشو کن یه نفری چه تاثیری روی دنیا گذاشته
به چه کاری میاد ؟ در کل یه ورژن کنترل هست یعنی ما باهاش میتونیم پروژه مون رو ورژن بندی کنیم و رو هر ورژن یه اسم بذاریم و هر زمان خواستیم بین ورژن ها بگردیم ، میشه باهاش چند نفری روی یه پروژه از راه دور کار کرد ( collaboration ) و میتونیم شاخه شاخه کنیم پروژه رو و هر فیچر رو توی یه شاخه توسعه بدیم
سخت اما لازم
گیت اولش یه کم قلق داره، چون چند تا مفهوم جدید داره که شاید اولش گنگ به نظر برسن (حداقل برای من که اینطوری بود!). ولی من برای اینکه خودم بهتر بفهممش، یه داستان توی ذهنم ساختم. گفتم شاید اگه این داستان رو اینجا تعریف کنم، به شما هم (مخصوصاً اگه اول راه یادگیری گیت هستید) کمک کنه که راحتتر تصورش کنید.
تئاتر گیت
تصور کن کل پروژه برنامهنویسی تو (همون که روی کامپیوتر خودته) یه سالن تئاتره. گیت مثل کارگردان و مدیر صحنهی این تئاتره که حواسش به همه چی هست.
اجزای اصلی تئاتر ما:
- پشت صحنه (Working Directory):
- اینجا همون پوشهی پروژه روی کامپیوترته. جایی که بازیگرها (فایلهای کد، عکسها، متنها و…) دارن آماده میشن، لباس عوض میکنن، گریم میشن. یعنی چی؟ یعنی تو داری فایلهات رو با VS Code یا هر ادیتور دیگهای تغییر میدی (اضافه کردن کد، پاک کردن، ویرایش کردن). همهی تغییرات اولیه اینجا اتفاق میافته. اینجا فضای کار شخصی توئه و هنوز هیچچیز رسمی نشده.
- صحنه یا استیج (Staging Area / Index):
- وقتی یه بازیگر گریم و لباسش تموم شد و آمادهی رفتن جلوی دوربین برای ثبت اون صحنه خاص شد، کارگردان (یعنی تو!) اون رو به روی صحنه هدایت میکنه. استیج جاییه که بازیگرهای منتخب (فایلهایی که تغییراتشون تموم شده و میخوای توی عکس بعدی باشن) صف میکشن و آمادهی عکس گرفتن (ثبت شدن) هستن. مهمه که بدونی فقط تغییراتی که به استیج اضافه میکنی، توی عکس بعدی ثبت میشن.
- آلبوم عکس اجراها (Local Repository):
- اینجا آرشیو اصلی تئاتر شماست که روی کامپیوتر خودت قرار داره. هر بار که کارگردان از بازیگرهای روی صحنه عکس میگیره، اون عکس به همراه یه توضیح (که توی اون صحنه چی گذشت) توی این آلبوم ذخیره میشه. هر عکس، یک نسخه یا ورژن از پروژه تو در یک لحظه خاصه. تاریخچهی کامل تمام اجراها و تغییرات بازیگرها توی این آلبوم ثبت میشه.
روند اجرای نمایش (دستورات اصلی گیت):
- افتتاح تئاتر (
git init):- وقتی برای اولین بار میخوای برای پروژهت از گیت استفاده کنی، باید تئاتر رو افتتاح کنی! این دستور توی پوشهی پروژهت، ساختارهای لازم گیت (مثل پشت صحنه، استیج خالی و فضای آلبوم) رو ایجاد میکنه. یعنی پروژهت رسماً به یه “مخزن گیت” تبدیل میشه.
- آمادهسازی بازیگران (ایجاد یا ویرایش فایلها):
- تو توی پشت صحنه (Working Directory) مشغول کار روی فایلهات هستی. کد مینویسی، فایل اضافه میکنی، چیزی رو پاک میکنی… اینها همون تغییراتی هستن که بازیگرها دارن روی خودشون پیاده میکنن.
- بررسی وضعیت (
git status):- هر لحظه میتونی از کارگردان (گیت) بپرسی اوضاع چطوره؟ کدوم بازیگرها توی پشت صحنه تغییر کردن؟ کدومها الان روی استیج منتظر عکسن؟ این دستور بهت یه گزارش کامل از وضعیت فعلی میده.
- آوردن بازیگران منتخب به صحنه (
git add):- وقتی تغییرات روی یک یا چند فایل تموم شد و به نظرت آمادهی ثبت شدن هستن، با این دستور به گیت میگی که این بازیگرهای خاص (این فایلهای تغییر کرده) رو ببر روی صحنه (Staging Area). میتونی یه بازیگر رو صدا بزنی (
git add file.html) یا همه بازیگرهای تغییر کردهی آماده رو با هم بفرستی روی صحنه (git add .).
- وقتی تغییرات روی یک یا چند فایل تموم شد و به نظرت آمادهی ثبت شدن هستن، با این دستور به گیت میگی که این بازیگرهای خاص (این فایلهای تغییر کرده) رو ببر روی صحنه (Staging Area). میتونی یه بازیگر رو صدا بزنی (
- عکس گرفتن از صحنه (
git commit):- حالا که بازیگرهای مورد نظرت روی صحنه آمادهان، وقتشه که یه عکس دستهجمعی ازشون بگیری! دستور
commitاز وضعیت فعلی تمام فایلهای روی صحنه (Staging Area) یه عکس فوری (Snapshot) میگیره و اون رو توی آلبوم عکس (Local Repository) ذخیره میکنه. موقع عکس گرفتن، حتماً باید یه توضیح کوتاه (Commit Message) هم بنویسی که این عکس مربوط به کدوم صحنه یا تغییر بوده (مثلاً: “اضافه شدن دکمه لاگین” یا “رفع باگ نمایش قیمت”). این توضیحات بعداً خیلی به دردت میخورن. - نکته مهم: بعد از کامیت، استیج دوباره خالی میشه و بازیگرها انگار برگشتن پشت صحنه، ولی وضعیت جدیدشون توی آلبوم ثبت شده. اگه باز تغییری بدی، دوباره باید بیاریشون روی صحنه و عکس (کامیت) جدید بگیری.
- حالا که بازیگرهای مورد نظرت روی صحنه آمادهان، وقتشه که یه عکس دستهجمعی ازشون بگیری! دستور
- مرور اجراهای گذشته (
git log):- هر وقت خواستی میتونی آلبوم عکس (Local Repository) رو ورق بزنی و عکسهای قبلی (کامیتها) رو ببینی. این دستور لیست تمام کامیتها رو به همراه توضیحاتشون، تاریخ و نویسندهشون بهت نشون میده. میفهمی کی، چی رو تغییر داده.
- بازگشت به عقب و اصلاح اشتباهات (
git checkout,git reset,git revert):- فرض کن گریم یه بازیگر خراب شده یا یه دیالوگ اشتباهی توی نمایش قبلی گفته شده. گیت بهت اجازه میده برگردی عقب!
- میتونی با
git checkout <commit-hash>مثل دیدن یه عکس قدیمی، به وضعیت پروژه در زمان اون عکس خاص نگاه کنی (ولی تغییرات جدیدت سر جاشون میمونن). - میتونی با
git checkout <file-name>تغییراتی که توی پشت صحنه روی یه فایل خاص دادی و هنوز به صحنه نبردی رو لغو کنی (انگار گریم اشتباهی رو پاک میکنی). - میتونی با
git resetعکسهای آخر آلبوم رو پاره کنی و به یه عکس قدیمیتر برگردی (البته با احتیاط!). - یا با
git revertیه “عکس اصلاحیه” بگیری که اثر یه عکس قبلی رو خنثی کنه (بدون اینکه خود عکس قبلی رو پاک کنی).
- میتونی با
- برای شروع، فقط بدون که راههایی برای برگشت و اصلاح وجود داره.
- فرض کن گریم یه بازیگر خراب شده یا یه دیالوگ اشتباهی توی نمایش قبلی گفته شده. گیت بهت اجازه میده برگردی عقب!
همکاری و اشتراکگذاری (کار با Remote):
- سالن اجرای عمومی / سرور مرکزی (Remote Repository مثل GitHub, GitLab):
- تا الان هر کاری کردی، توی تئاتر شخصی خودت (Local Repository) بوده. حالا فرض کن میخوای این نمایش رو برای بقیه هم اجرا کنی یا از بقیه بازیگرها (همتیمیها) کمک بگیری. اینجا پای یه سرور آنلاین مثل GitHub یا GitLab وسط میاد که میشه نسخهی اصلی و عمومی نمایش شما.
- ارسال اجرا به سرور مرکزی (
git push):- وقتی چند تا عکس جدید به آلبوم شخصیت اضافه کردی و ازشون مطمئن شدی، با این دستور، عکسهای جدید (کامیتها) رو از آلبوم خودت (Local Repo) به سالن اجرای عمومی (Remote Repo) میفرستی تا بقیه هم ببینن و آخرین نسخه اونجا آپدیت بشه.
- دریافت آخرین تغییرات از سرور (
git pull/git fetch):- اگه بقیه همتیمیها هم تغییراتی رو به سرور مرکزی فرستاده باشن (
pushکرده باشن)، تو باید آخرین نسخهی نمایش رو از اونجا بگیری.git fetchآخرین اطلاعات و عکسها رو از سرور میگیره ولی توی کار فعلی تو دخالت نمیکنه (فقط خبردار میشی چه خبره).git pullهمون کارWorkspaceرو میکنه و بلافاصله سعی میکنه اون تغییرات جدید رو با کار تو روی صحنهی خودت ترکیب کنه (Merge کنه).
- اگه بقیه همتیمیها هم تغییراتی رو به سرور مرکزی فرستاده باشن (
- ترکیب اجراها و تداخلها (Merging & Merge Conflicts):
- وقتی تغییرات بقیه رو میگیری (
pull) یا وقتی خودت روی شاخههای مختلف کار میکنی (در ادامه میگم)، ممکنه گیت بخواد دو تا تغییر رو با هم ترکیب کنه. اگه تو و همکارت روی یه قسمت مشترک از نمایش (یه تیکه کد توی یه فایل) تغییرات متفاوتی داده باشید، گیت گیج میشه! مثل اینه که دو تا بازیگر بخوان یه نقش رو همزمان با دو تا دیالوگ متفاوت بازی کنن! به این میگن تداخل یا Conflict. در این حالت، گیت بهت میگه کجا مشکل پیش اومده و تو باید دستی تصمیم بگیری که کدوم تغییر بمونه یا چطور با هم ترکیب بشن.
- وقتی تغییرات بقیه رو میگیری (
کار روی ایدههای مختلف به صورت موازی (Branching):
- ایجاد صحنهی آزمایشی (
git branch <branch-name>):- فرض کن میخوای یه ایدهی جدید برای یه صحنه (یه فیچر جدید توی برنامهت) رو امتحان کنی، ولی نمیخوای نمایش اصلی که الان داره اجرا میشه خراب بشه. میتونی یه شاخه یا صحنهی موازی درست کنی. این شاخه یه کپی از نمایش اصلی در اون لحظهست.
- رفتن به صحنهی آزمایشی (
git checkout <branch-name>):- با این دستور، از صحنهی اصلی میری روی اون صحنهی آزمایشی و هر کاری میکنی (اضافه کردن بازیگر، تغییر دیالوگ، عکس گرفتن یا کامیت کردن) فقط روی همون شاخه تأثیر داره و نمایش اصلی دستنخورده باقی میمونه.
- ترکیب صحنهی آزمایشی با نمایش اصلی (
git merge <branch-name>):- وقتی کارت روی اون صحنهی آزمایشی تموم شد و از نتیجه راضی بودی، برمیگردی به صحنهی اصلی (
git checkout mainیاmaster) و با دستورmerge، تمام تغییراتی که توی شاخهی آزمایشی دادی رو به نمایش اصلی اضافه میکنی. انگار اون صحنهی جدید و موفق رو به فیلمنامهی اصلی اضافه کرده باشی. (اینجا هم ممکنه Conflict پیش بیاد).
- وقتی کارت روی اون صحنهی آزمایشی تموم شد و از نتیجه راضی بودی، برمیگردی به صحنهی اصلی (
پس شد :
صحنههای موازی (Branches): برای کار روی فیچرهای جدید بدون خراب کردن کار اصلی.
تئاتر: کل پروژه روی کامپیوترت.
پشت صحنه (Working Directory): جایی که فایلها رو تغییر میدی (هنوز رسمی نیست).
صحنه (Staging Area): جایی که تغییرات منتخب رو آمادهی ثبت میکنی (git add).
آلبوم عکس (Local Repository): آرشیو تمام عکسهای گرفته شده (کامیتها) از پروژه روی کامپیوترت (git commit).
سالن اجرای عمومی (Remote Repository): نسخهی مرکزی و اشتراکی پروژه روی سرور (مثل GitHub) (git push, git pull).
کارگردان/مدیر صحنه: گیت! که همه چیز رو مدیریت و ثبت میکنه.
2 پاسخ
perfect
your welcome!