معرفی
گیت (Git) یک سامانه کنترل نسخه توزیعشده است که تغییرات فایلهای یک پروژه را ثبت میکند. با گیت میتوانید بدانید چه تغییری، چه زمانی و در کدام شاخه انجام شده است و در صورت نیاز به نسخه قبلی برگردید.
در یک کلون معمولی، توسعهدهنده تاریخچه و شاخههای مخزن را روی سیستم خود دارد. با این حال، در shallow clone یا partial clone ممکن است فقط بخشی از تاریخچه یا دادههای مخزن دریافت شود. گیت امکان ثبت محلی تغییرات، ساخت شاخه، دریافت کار همتیمیها و ادغام کار در شاخه اصلی را فراهم میکند. مدلی که برای توسعه همزمان قابلیتها و رفع خطاها کاربردی است.
گیت ابزار پایه اجرای مهارت کنترل نسخه در تیمهای بکاند، فرانتاند، موبایل و دواپس است. سرویسهایی مانند GitLab مخزن گیت را میزبانی میکنند و امکاناتی مانند بازبینی کد، درخواست ادغام و اجرای خط لوله CI/CD را روی آن اضافه میکنند. اما خود گیت مسئول ثبت و مدیریت تاریخچه تغییرات است.
انتخاب جریان کار با merge و rebase
برای ادغام یک شاخه قابلیت در شاخه اصلی، merge معمولا انتخاب امنتری است. زیرا تاریخچه موجود را بازنویسی نمیکند و نقطه ادغام را حفظ میکند. این روش برای شاخههای مشترک و تغییراتی که همتیمیها روی آنها کار میکنند، مناسبتر است.
rebase commitهای شاخه شما را روی نوک جدید شاخه مقصد بازسازی میکند و تاریخچه خطیتری میسازد. آن را بیشتر برای مرتبکردن شاخه شخصی، پیش از ارسال برای بازبینی، به کار ببرید. rebase کردن شاخهای که دیگران از آن pull کردهاند میتواند شناسه commitها را تغییر دهد و کار همتیمیها را دچار تعارض کند. تاریخچه شاخه اشتراکی را بازنویسی نکنید.
برای آمادگی ورود به نقشهای توسعه نرمافزار در ایران، فقط دانستن نام دستورها کافی نیست. باید بتوانید در یک مخزن نمونه، شاخه قابلیت بسازید، تغییرات را در commitهای کوچک ثبت کنید، تغییرات شاخه اصلی را دریافت کنید، تعارض را حل کنید و یک درخواست ادغام قابل بازبینی آماده کنید.
ویژگیهای کلیدی
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
تاریخچه محلی و توزیعشده
کلون معمولی مخزن معمولا تاریخچه و شاخهها را دارد و میتوانید commit، diff و log را بدون اتصال شبکه بررسی کنید. در shallow clone یا partial clone ممکن است بخشی از تاریخچه یا دادهها محلی نباشد.
-
شاخهسازی سبک
شاخهها برای توسعه قابلیت، رفع باگ یا آزمایش تغییرات جداگانه ساخته میشوند و هزینه کمی در مخزن دارند.
-
ثبت تغییرات مرحلهای
ناحیه مرحلهبندی تغییرات (staging area) محل انتخاب دقیق فایلها یا بخشهای آماده پیش از commit است. بنابراین لازم نیست همه فایلهای ویرایششده را با هم ثبت کنید.
-
ادغام و حل تعارض
Git تغییرات شاخهها را ادغام میکند. اگر دو تغییر روی یک بخش فایل ناسازگار باشند، محل تعارض را مشخص میکند تا توسعهدهنده تصمیم نهایی را بگیرد.
-
کار با مخزن راه دور
دستورهای fetch، pull و push تغییرات مخزن محلی را با سرورهایی مانند GitLab هماهنگ میکنند و همکاری تیمی را ممکن میسازند.
-
بازبینی دقیق تغییرات
دستورهایی مانند diff، status، log و blame به شما کمک میکنند پیش از ارسال تغییرات، تفاوت نسخهها و منشأ یک خط را بررسی کنید.
کاربردها
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
توسعه یک قابلیت بکاند در شاخه مستقل
برای یک endpoint یا تغییر مدل داده، شاخهای از شاخه اصلی میسازید، تغییرات کوچک و معنادار را commit میکنید و پس از بازبینی، آن را ادغام میکنید.
-
همگامسازی روزانه با تیم
پیش از شروع یا ارسال کار، تغییرات شاخه راه دور را دریافت میکنید، تفاوتها را بررسی میکنید و در صورت نیاز تعارضها را حل میکنید.
-
بازگرداندن تغییر ناموفق
اگر یک commit باعث خطا شود، میتوانید با revert اثر آن را در تاریخچه معکوس کنید یا در شاخه محلی به وضعیت مناسبتری برگردید.
-
آمادهسازی تغییرات برای بازبینی کد
تغییرات نامرتبط را جدا میکنید، پیام commit روشن مینویسید و شاخه را برای ایجاد Merge Request در سرویس میزبانی ارسال میکنید.
-
مدیریت نسخههای انتشار
با tag میتوانید یک commit مشخص را به نسخه انتشار مرتبط کنید تا ساخت، استقرار یا بررسی خطا به کد دقیق همان نسخه ارجاع دهد.
پرسشهای رایج درباره گیت
اگر درباره این ابزار پرسشی دارید، ممکن است پاسخ آن را در میان موارد زیر پیدا کنید.
آیا Git و GitLab یک ابزار هستند؟
خیر. Git ابزار کنترل نسخه است که روی سیستم شما اجرا میشود. GitLab یک پلتفرم میزبانی مخزن گیت و همکاری تیمی است و امکاناتی مانند Merge Request، مدیریت دسترسی و CI/CD ارائه میدهد.
برای شروع کار با گیت چه دستورهایی را یاد بگیرم؟
ابتدا git init یا git clone، سپس git status، git add، git commit، git log، git branch، git switch، git pull و git push را تمرین کنید. یک تمرین قابلسنجش این است که مخزنی بسازید، دو commit در یک شاخه ثبت کنید، آن شاخه را در شاخه اصلی ادغام کنید و با git log هر سه commit و نقطه ادغام را ببینید.
تفاوت git fetch و git pull چیست؟
git fetch اطلاعات و commitهای جدید مخزن راه دور را دریافت میکند، اما شاخه کاری شما را تغییر نمیدهد. git pull معمولا دریافت تغییرات و ادغام یا rebase آنها در شاخه فعلی را با هم انجام میدهد.
تعارض گیت چیست و چگونه حل میشود؟
تعارض زمانی رخ میدهد که Git نتواند میان تغییرات ناسازگار دو شاخه تصمیم بگیرد. فایلهای علامتگذاریشده را بررسی کنید، محتوای درست را انتخاب یا ترکیب کنید، فایل را add کنید و فرایند merge یا rebase را ادامه دهید.
آیا باید فایلهای تنظیمات و رمزها را در گیت ثبت کنم؟
فایلهای دارای رمز، کلید خصوصی، توکن و دادههای محرمانه را ثبت نکنید. آنها را در .gitignore قرار دهید و برای اشتراک تنظیمات، فایل نمونه مانند .env.example بدون مقدار حساس بسازید.