راهنمای جامع سیستم‌های کنترل نسخه (Git) برای برنامه‌نویسان

سیستم‌های کنترل نسخه (Version Control Systems یا VCS) ابزارهایی قدرتمند هستند که به توسعه‌دهندگان نرم‌افزار کمک می‌کنند تا تغییرات ایجاد شده در کد منبع را مدیریت کنند. این سیستم‌ها به شما امکان می‌دهند تا نسخه‌های مختلف از کد خود را ذخیره کنید، تغییرات را پیگیری کنید، همکاری بهتری با سایر توسعه‌دهندگان داشته باشید و در صورت بروز مشکل، به نسخه‌های قبلی بازگردید. یکی از محبوب‌ترین سیستم‌های کنترل نسخه، Git است. در ادامه به بررسی سوالات در مورد Git میپردازم.



1. در مورد سیستم‌های کنترل نسخه چه می‌دانید؟

سیستم‌های کنترل نسخه (VCS) ابزارهایی هستند که به توسعه‌دهندگان اجازه می‌دهند تا تغییرات ایجاد شده در فایل‌ها (معمولاً کد منبع) را در طول زمان ردیابی کنند. این سیستم‌ها با ایجاد یک تاریخچه از تغییرات، به شما امکان می‌دهند تا به نسخه‌های قبلی بازگردید، تغییرات را مقایسه کنید و همکاری بهتری با سایر توسعه‌دهندگان داشته باشید.

2. تفاوت بین سیستم‌های کنترل نسخه متمرکز و توزیع شده چیست؟

  • سیستم‌های کنترل نسخه متمرکز (Centralized VCS): در این سیستم‌ها، یک مخزن مرکزی وجود دارد که تمام تغییرات در آن ذخیره می‌شود. توسعه‌دهندگان باید از این مخزن مرکزی برای دریافت آخرین تغییرات و ارسال تغییرات خود استفاده کنند.
  • سیستم‌های کنترل نسخه توزیع شده (Distributed VCS): در این سیستم‌ها، هر توسعه‌دهنده یک کپی کامل از مخزن مرکزی را در دستگاه خود دارد. این به معنای آن است که هر توسعه‌دهنده می‌تواند به صورت آفلاین کار کند و تغییرات خود را به صورت محلی ذخیره کند. سپس، این تغییرات می‌توانند با مخزن مرکزی همگام‌سازی شوند. Git یک نمونه از سیستم‌های کنترل نسخه توزیع شده است.

3. عبارت git push به چه معناست؟

دستورgit push دستوری است که برای ارسال تغییرات محلی شما از مخزن محلی به یک مخزن از راه دور استفاده می‌شود. به عبارت دیگر، با استفاده از این دستور، تغییرات شما به اشتراک گذاشته می‌شود تا سایر توسعه‌دهندگان بتوانند به آن‌ها دسترسی داشته باشند.

4. عبارت git pull به چه معناست؟

دستور git pull دستوری است که برای دریافت آخرین تغییرات از یک مخزن از راه دور و ادغام آن‌ها با مخزن محلی شما استفاده می‌شود. به عبارت دیگر، با استفاده از این دستور، شما می‌توانید مخزن محلی خود را با آخرین تغییرات ایجاد شده توسط سایر توسعه‌دهندگان به روز کنید.

5. دستور git config چه کاری انجام می دهد؟

دستور git config دستوری است که برای تنظیم پیکربندی‌های مختلف در Git استفاده می‌شود. این تنظیمات می‌تواند شامل نام کاربری، ایمیل، ویرایشگر پیش‌فرض و بسیاری از تنظیمات دیگر باشد.

6. دستور git init چه کاری انجام می دهد؟

دستور git init دستوری است که برای ایجاد یک مخزن Git جدید در یک دایرکتوری استفاده می‌شود. این دستور یک دایرکتوری مخفی به نام .git ایجاد می‌کند که تمام اطلاعات مربوط به مخزن را در خود ذخیره می‌کند.

7. دستور git add چه می کند؟

دستور git add دستوری است که برای اضافه کردن تغییرات جدید به ناحیه‌ی staging استفاده می‌شود. ناحیه‌ی staging جایی است که تغییرات قبل از commit شدن در آن نگهداری می‌شوند.

8. دستور git diff چه کاری انجام می دهد؟

دستور git diff دستوری است که برای نمایش تفاوت بین دو نسخه از یک فایل یا بین فایل‌های stage شده و فایل‌های کاری استفاده می‌شود.

9. دستور git commit چه کاری انجام می دهد؟

دستور git commit دستوری است که برای ایجاد یک عکس فوری از تغییرات فعلی در ناحیه‌ی staging استفاده می‌شود. هر commit یک نقطه بازیابی ایجاد می‌کند که در آینده می‌توانید به آن بازگردید.

10. دستور git reset چه کاری انجام می دهد؟

دستور git reset دستوری است که برای بازگرداندن تغییرات به یک commit قبلی یا برای حذف فایل‌ها از ناحیه‌ی staging استفاده می‌شود.

11. دستور git status چه کاری انجام می دهد؟

دستور git status دستوری است که برای نمایش وضعیت فعلی مخزن شما استفاده می‌شود. این دستور به شما نشان می‌دهد که کدام فایل‌ها تغییر کرده‌اند، کدام فایل‌ها به ناحیه‌ی staging اضافه شده‌اند و کدام commit‌ها هنوز به مخزن از راه دور ارسال نشده‌اند.

12. دستور git merge چه کاری انجام می دهد؟

دستور git merge دستوری است که برای ادغام دو شاخه در Git استفاده می‌شود.

13. دستور git pull چه کار می کند؟

همانطور که قبلاً توضیح داده شد، git pull دستوری است که برای دریافت آخرین تغییرات از یک مخزن از راه دور و ادغام آن‌ها با مخزن محلی شما استفاده می‌شود.

14. دستور git fetch چه کاری انجام می دهد؟

دستور git fetch دستوری است که برای دریافت آخرین تغییرات از یک مخزن از راه دور به مخزن محلی شما استفاده می‌شود، اما این تغییرات را بلافاصله ادغام نمی‌کند. ابتدا باید با استفاده از دستور git merge این تغییرات را ادغام کنید.

15. عبارت git pull چه تفاوتی با git fetch دارد؟

دستور git pull ترکیبی از دو دستور git fetch و git merge است. یعنی ابتدا تغییرات را از مخزن از راه دور دریافت می‌کند و سپس آن‌ها را با شاخه فعلی شما ادغام می‌کند. در حالی که git fetch فقط تغییرات را دریافت می‌کند و ادغام را به عهده‌ی شما می‌گذارد.

16. توضیح دهید که تضاد ادغام در Git چیست؟

تضاد ادغام زمانی رخ می‌دهد که دو شاخه به طور مستقل از هم تغییراتی را در همان بخش از یک فایل ایجاد کنند. در این صورت، Git نمی‌تواند به طور خودکار این تغییرات را ادغام کند و از شما می‌خواهد که به صورت دستی تضاد را حل کنید.

17. چگونه یک تضاد ادغام را در Git حل می کنید؟

برای حل تضاد ادغام، باید فایل‌های دارای تضاد را به صورت دستی ویرایش کنید و تغییرات مورد نظر خود را حفظ کنید. سپس، می‌توانید تغییرات را مجدداً به ناحیه‌ی staging اضافه کرده و commit کنید.

18. به من بگویید درباره git stash چه می دانید؟

دستور git stash دستوری است که برای موقتاً پنهان کردن تغییرات نشده در ناحیه‌ی staging استفاده می‌شود. این کار زمانی مفید است که می‌خواهید به یک شاخه دیگر بروید یا یک کار جدید را شروع کنید، اما می‌خواهید تغییرات فعلی خود را از دست ندهید.

19. عبارت git merge چه تفاوتی با git rebase دارد؟

  • دستور git merge: برای ادغام دو شاخه به صورت خطی استفاده می‌شود. در این روش، یک commit جدید ایجاد می‌شود که نشان‌دهنده‌ی ادغام دو شاخه است.
  • دستور git rebase: برای ادغام دو شاخه به صورت غیرخطی استفاده می‌شود. در این روش، commit‌های یک شاخه روی شاخه‌ی دیگر پیوند زده می‌شوند.




مفاهیم پیشرفته‌تر Git

شاخه‌ها (Branches) در Git

  • شاخه چیست؟ یک شاخه در Git، یک خط زمانی مستقل از تغییرات است. به عبارت دیگر، هر شاخه یک نسخه جداگانه از مخزن شما را نشان می‌دهد.
  • چرا از شاخه استفاده می‌کنیم؟کار بر روی ویژگی‌های جدید به صورت موازی: می‌توانید برای هر ویژگی جدید یک شاخه ایجاد کنید و بدون اینکه روی کد اصلی تأثیر بگذارید، روی آن کار کنید.
    رفع باگ‌ها: می‌توانید یک شاخه جداگانه برای رفع باگ‌ها ایجاد کنید.
    ** آزمایش تغییرات:** می‌توانید تغییرات آزمایشی را در یک شاخه جداگانه اعمال کنید و اگر نتیجه دلخواه را نگرفتید، آن شاخه را حذف کنید.
  • دستورات مهم مربوط به شاخه‌ها:

دستور git branch: لیست تمام شاخه‌ها را نشان می‌دهد.

دستور git branch <نام_شاخه>: یک شاخه جدید ایجاد می‌کند.

دستور git checkout <نام_شاخه>: به شاخه مشخص شده تغییر می‌کند.

دستور git merge <نام_شاخه>: شاخه مشخص شده را با شاخه فعلی ادغام می‌کند.

دستور git branch -d <نام_شاخه>: شاخه مشخص شده را حذف می‌کند.

تگ‌ها (Tags) در Git

  • تگ چیست؟ یک تگ، یک نشانگر ثابت به یک commit خاص است. از تگ‌ها برای مشخص کردن نسخه‌های مهم نرم‌افزار، مانند نسخه‌های منتشر شده، استفاده می‌شود.
  • چرا از تگ استفاده می‌کنیم؟نشانه‌گذاری نسخه‌های مهم: با استفاده از تگ، می‌توانید به راحتی به یک نسخه خاص از نرم‌افزار بازگردید.
    ایجاد نقاط مرجع: تگ‌ها به عنوان نقاط مرجع برای انتشار نرم‌افزار عمل می‌کنند.
  • دستورات مهم مربوط به تگ‌ها:git tag: لیست تمام تگ‌ها را نشان می‌دهد.
    git tag <نام_تگ> <commit_hash>: یک تگ جدید ایجاد می‌کند.
    git checkout <نام_تگ>: به commit مشخص شده توسط تگ تغییر می‌کند.

راهکارهای پیشرفته برای حل تضادهای ادغام

  • ویرایش دستی فایل‌ها: این روش معمول‌ترین روش برای حل تضاد است. شما باید به صورت دستی فایل‌های دارای تضاد را ویرایش کرده و تغییرات مورد نظر خود را حفظ کنید.
  • استفاده از ابزارهای ادغام بصری: برخی از ابزارهای Git مانند GitHub Desktop و GitKraken دارای رابط کاربری گرافیکی هستند که به شما کمک می‌کنند تا تضادهای ادغام را به صورت بصری حل کنید.
  • استفاده از ابزارهای خط فرمان: ابزارهایی مانند diff3 می‌توانند به شما در مقایسه‌ی تفاوت‌های بین نسخه‌های مختلف یک فایل کمک کنند.

کار با مخازن از راه دور

  • مخزن از راه دور چیست؟ یک مخزن از راه دور، یک کپی از مخزن محلی شما است که در یک سرور قرار دارد.
  • دستورات مهم مربوط به مخازن از راه دور:git remote add <نام_مخزن> <آدرس_مخزن>: یک مخزن از راه دور جدید اضافه می‌کند.
    git push <نام_مخزن> <شاخه>: تغییرات را به مخزن از راه دور ارسال می‌کند.
    git pull <نام_مخزن> <شاخه>: تغییرات را از مخزن از راه دور دریافت می‌کند و با شاخه محلی ادغام می‌کند.

همکاری با سایر توسعه‌دهندگان در Git

  • معنای Fork کردن یک مخزن: ایجاد یک کپی از یک مخزن موجود در حساب کاربری خود.
  • معنای Pull Request: ارسال درخواست برای ادغام تغییرات شما در مخزن اصلی.
  • معنای Code Review: بررسی کد شما توسط سایر توسعه‌دهندگان قبل از ادغام.

مفاهیم پیشرفته‌تر دیگر

  • معنای Git Hooks: اسکریپت‌هایی که در رویدادهای مختلف Git اجرا می‌شوند.
  • معنای Submodules: اضافه کردن یک مخزن Git به عنوان زیرمجموعه‌ای از مخزن اصلی.
  • معنای Rebasing: بازنویسی تاریخچه‌ی commit‌ها.
  • معنای Cherry-picking: انتخاب و اعمال commit‌های خاص از یک شاخه به شاخه دیگر.



منابع آموزشی بیشتر برای یادگیری Git

عالی است که به دنبال یادگیری بیشتر در مورد Git هستید. این ابزار قدرتمند، ابزاری ضروری برای هر برنامه‌نویس است. در ادامه به شما منابع مختلفی را معرفی می‌کنم که می‌توانید برای یادگیری بیشتر از آن‌ها استفاده کنید:

کتاب‌های آنلاین و الکترونیکی

  • کتاب Pro Git: این کتاب به صورت آنلاین به صورت رایگان در دسترس است و یکی از جامع‌ترین منابع برای یادگیری Git است. این کتاب به زبان ساده و با مثال‌های عملی، مفاهیم Git را توضیح می‌دهد.
  • کتاب گیت برا یتیم ها Git for Teams: این کتاب بر روی استفاده از Git در محیط‌های تیمی تمرکز دارد و بهترین روش‌ها برای کار گروهی با Git را ارائه می‌دهد.
  • کتاب گیت در عمل Git in Practice: این کتاب به شما کمک می‌کند تا Git را در دنیای واقعی و در پروژه‌های خود پیاده‌سازی کنید.

دوره‌های آنلاین

  • یادگیری انلاین: پلتفرمی است که به صورت تعاملی و گام به گام به شما آموزش می‌دهد که چگونه از Git و GitHub استفاده کنید.

https://learngitbranching.js.org/

  • سایت های آموزشی Coursera, Udemy, edX: این پلتفرم‌های آموزشی آنلاین، دوره‌های مختلفی در مورد Git ارائه می‌دهند که توسط اساتید و متخصصان این حوزه تدریس می‌شوند.
  • پلتفرم YouTube: بسیاری از آموزش‌های رایگان و باکیفیت در مورد Git در یوتیوب وجود دارد. کانال‌های مختلفی مانند Traversy Media، freeCodeCamp و The Coding Train ویدیوهای آموزشی بسیار خوبی در این زمینه ارائه می‌دهند.




دانلود کتاب Pro Git

https://git-scm.com/book/en/v2