گیت چیست؟
git رایجترین سیستم کنترل نسخهای1version control system است که امروزه مورد استفاده قرار میگیرد. git تغییراتی را که در فایلهای کدنویسی ایجاد میکنید، ردیابی میکند. بنابراین کارهای قبلی شما به کمک git ذخیره میشوند و به عنوان نسخهها یا ورژنهای قبلی کار شما در نظر گرفته میشوند. در صورت نیاز میتوانید به نسخههای خاصی بازگردید. git همچنین همکاری را آسانتر میکند و اجازه میدهد تغییرات توسط چندین نفر در یک منبع یا پروژه ایجاد شود.
بنابراین صرفنظر از اینکه کدی را بنویسید که فقط شما آن را ببینید (پروژه فردی) یا به عنوان بخشی از یک تیم کار کنید، git برای شما مفید خواهد بود.
git نرمافزاری است که به صورت محلی و در کامپیوتر شخصی شما اجرا میشود. فایلهای شما و تاریخچه آنها در رایانه شما ذخیره میشوند. همچنین میتوانید از هاستهای آنلاین (مانند GitHub یا Bitbucket) برای ذخیره یک کپی از فایلها و تاریخچه بازبینی آنها استفاده کنید.
داشتن یک مکان آنلاین و متمرکز که بتوانید تغییرات خود را آپلود کنید و فایلهایی را که توسط دیگران تغییر یافتهاند، دانلود کنید، شما را قادر میسازد تا با سایر توسعهدهندگان راحتتر همکاری کنید. git میتواند به طور خودکار تغییرات را ادغام کند. بنابراین حتی دو نفر میتوانند روی قسمتهای مختلف یک فایل کار کنند و بعداً آن تغییرات را بدون از دست دادن کار یکدیگر ادغام کنند!
آموزش git، ویژگیها و مفاهیم پایه
برای درک بهتر اینکه «گیت چیست؟»، در اینجا به صورت کلی و مقدماتی مفاهیم git و ویژگیها و قابلیتهایی که در آن وجود دارد، بیان میشوند:
- git پرکاربردترین سیستم کنترل نسخه است که امکان ردیابی تغییرات فایلها و همکاری آسانتر بین چندین کاربر (برنامهنویس) را فراهم میکند.
- git را میتوان از طریق یک خط فرمان یا از طریق یک برنامه دسکتاپ با رابط کاربری گرافیکی مانند Sourcetree به کار گرفت.
- یک مخزن گیت2git repository شامل تمام فایلهای پروژه و تاریخچه ویرایش کامل آنها است که در یک زیرپوشه3subfolder به نام git. ذخیره میشوند.
- git به کاربران اجازه میدهد تا عملیات ″stage″ و ″commit″ را بر روی فایلها انجام دهند و آنها را قادر میسازد نسخههای خاصی از پروژه را جهت بررسی یا بهروزرسانی انتخاب کنند.
- هاستهای آنلاین مانند GitHub و Bitbucket میتوانند برای ذخیره یک کپی از مخزن گیت استفاده شوند و امکان همکاری روانتر با توسعهدهندگان دیگر را فراهم کنند.
- git همچنین از انشعاب4branching و ادغام5merging پشتیبانی میکند. در نتیجه امکان گردش کار و توسعه همزمان پروژه توسط اعضای یک تیم را فراهم میکند. ابزارهای قوی در git برای رسیدگی به تعارضات و مشکلات فایلها در حین فرآیند ادغام فراهم است.
آموزش git، راههای استفاده از git
git نرمافزاری است که میتوانید از طریق یک خط فرمان6terminal یا یک برنامه دسکتاپ که دارای رابط کاربری گرافیکی7graphical user interface است، به آن دسترسی داشته باشید. از جمله این برنامهها، برنامه Sourcetree است که محیط آن در زیر نشان داده شده است.
مخازن گیت چیست؟ (Git Repositories)
یک مخزن گیت (یا به اختصار repo) شامل تمام فایلهای پروژه و کل تاریخچه ویرایش است. شما یک پوشه معمولی از فایلها (مانند پوشه ریشه وبسایت) را در نظر میگیرید و به git میگویید که آن را به یک مخزن تبدیل کند. این ابزار یک زیرپوشه به نام git. ایجاد میکند که شامل تمام دادههای جانبی git برای ردیابی تغییرات است.
در سیستم عاملهای مبتنی بر یونیکس8Unix-based operating systems مانند macOS، فایلها و پوشههایی که با نقطه (.) شروع میشوند، پنهان هستند. بنابراین پوشه git. را در ابزار macOS Finder نمیبینید، مگر اینکه تنظیمات فایلهای پنهان در سیستم عامل را به حالت نشان دادن تغییر دهید. اما چنین فایلی وجود دارد! شاید بتوانید آن را در برخی از ویرایشگرهای کد و ابزارهای کدنویسی مشاهده کنید.
عملیات commit و stage در گیت چیست؟
به بیان ساده میتوانید git را به عنوان ابزاری تصور کنید که لیستی از تغییرات در فایلهای پروژه شما را ذخیره میکند و نسخههای مختلفی از پروژه را ایجاد کرده و مدیریت میکند. پس باید بتوانیم به گیت بگوییم که تغییرات ما را چگونه ثبت کند؟ در حقیقت در زبان گیت، هر تغییر ثبت شده در یک فایل یا مجموعهای از فایلها، commit نامیده میشود.
اما قبل از اینکه بخواهیم عملیات commit را در گیت اجرا کنیم، باید برای گیت تعیین کنیم که چه فایلهایی را میخواهیم commit کنیم (یعنی تغییرات آنها را ثبت کنیم). به این حالت قرار دادن فایلها در لیست تغییرات و ثبت شدن برای اجرای commit، عملیات staging گفته میشود و برای اجرای آن از دستور add استفاده میکنیم.
چرا باید این کار را انجام دهیم؟ چرا نمیتوانیم فایل را مستقیماً commit کنیم؟ فرض کنید روی دو فایل کار میکنید، اما تنها یکی از آنها آماده شده است. دیگری هنوز نیاز به تغییرات دارد. شما نمیخواهید مجبور شوید هر دو فایل را commit کنید. بلکه فقط فایلی که آماده است باید commit شود. اینجا است که کارایی دستور add در git نمایان میشود. در اصل ما فایلهایی را که آماده ثبت شدن هستند، به مرحله یا عملیات stage اضافه میکنیم و سپس فقط این فایلها را commit میکنیم.
مخازن گیت ازراهدور یا آنلاین (مانند GitHub و Bitbucket)
برای اینکه بهتر درک کنید گیت چیست، باید با مخازن آنلاین گیت نیز آشنا باشید. قرار دادن یک کپی از مخزن git خود در یک هاست آنلاین (مانند ابزارهایی چون GitHub یا Bitbucket) به شما مکانی متمرکز میدهد که میتوانید تغییرات خود را آپلود کنید و تغییراتی که دیگران ثبت میکنند، دانلود کنید. این کار به شما امکان میدهد راحتتر با توسعهدهندگان دیگر همکاری کنید. پس از اینکه یک مخزن آنلاین راهاندازی کردید، فایلهای خود و تاریخچه بازبینی را در آن آپلود میکنید.
در زبان گیت به این کار push کردن فایلها (git push) گفته میشود. پس از اینکه شخص دیگری تغییراتی را در یک repo ازراهدور ایجاد کرد، میتوانید تغییرات آنها را در repo محلی خود دانلود کنید. به این کار نیز در اصطلاح pull کردن تغییرات (git pull) گفته میشود. البته هر کدام از این کارها و عملیات نیاز به دستورهای خاصی دارد که در این مقاله آموزش git خیلی به جزئیات آنها نمیپردازیم.
مفاهیم شعبهها (Branches) و ادغام (Merging) در git
git به شما امکان میدهد پروژه خود را به حالت شاخهشاخه و انشعاب درآورید. یعنی بخشهایی ایجاد کنید که در واقع از پایه کد اصلی پروژه شما منشعب میشوند. گویی هر یک بخشی از پروژه اصلی هستند. یا یک کپی از پروژه اصلی شما هستند. این کار به شما اجازه میدهد راحتتر با توسعهدهندگان دیگر کار کنید و انعطافپذیری زیادی در گردش کار خودتان داشته باشید.
در اینجا مثالی از مفید بودن شاخههای git آورده شده است. فرض کنید باید روی یک ویژگی جدید برای یک وبسایت کار کنید. شما یک شعبه9branch جدید ایجاد کرده و شروع به کار میکنید. در حالی که هنوز شما ویژگی جدید سایت خود را تکمیل نکردهاید، درخواستی برای ایجاد یک تغییر فوری دریافت میکنید که باید امروز در سایت (که فعلا همان نسخه قدیمی است) اعمال شود. شما به شاخه اصلی برمیگردید، تغییر را ایجاد میکنید و آن را منتشر10push میکنید. سپس میتوانید به شاخه ویژگی جدید خود برگردید و کار خود را به پایان برسانید. وقتی کارتان تمام شد، شاخه ویژگی جدید را در شاخه اصلی11master branch ادغام میکنید. در نتیجه هم ویژگی جدید در سایت اعمال شده است و هم توانستهاید تغییر فوری پیشآمده را ایجاد کنید!
بهوجودآمدن تعارض در git merging
وقتی دو شاخه را ادغام میکنید (یا یک شاخه محلی در سیستم خود را با شاخهای دیگر که به صورت آنلاین قرار دارد، ادغام میکنید)، گاهی اوقات ممکن است دچار تعارض شوید. یعنی خطاهایی به وجود آید و شما نتیجه موفقیتآمیزی نگیرید. به عنوان مثال، شما و یک توسعهدهنده دیگر، ناخودآگاه هر دو بر روی یک قسمت از یک فایل کار میکنید.
توسعهدهنده دیگر تغییرات خود را به مخزن راه دور انتقال میدهد. هنگامی که آنها را به مخزن محلی خود بکشید12git pull، در اجرای عملیات ادغام ممکن است خطا به وجود آید. زیرا شما تغییرات خود را بر اساس همان فایلهای قبلی ایجاد کردهاید و از تغییرات جدیدی که توسعهدهنده دیگر داده است، مطلع نبودید. خوشبختانه گیت راهی برای رسیدگی به تعارضات دارد، بنابراین میتوانید هر دو مجموعه تغییرات را ببینید و تصمیم بگیرید که کدام را میخواهید حفظ کنید. یا بر اساس خطایی که به شما میدهد به سرچ آنلاین بپردازید و راه حل و رفع آن خطا را بیابید.
مفهوم pull request در گیت چیست؟
در این مقاله آموزش git در بخشهای قبل گفتیم که در این ابزار، مفاهیم یا عملیاتهای pull و push برای ثبت و انتقال تغییرات وجود دارند. اما اگر قرار باشد در یک تیم توسعهدهنده که بر روی یک پروژه کار میکنند هر فردی به راحتی هر تغییری در پروژه اعمال کند و هیچ هماهنگی و نظارتی در کار نباشد، مسلما پروژه ناموفق خواهد بود.
لذا درخواستهای تغییرات13pull requests در گیت ایجاد شدهاند تا راهی برای بحث در مورد تغییرات قبل از ادغام آنها در مجموعه کدهای پروژه پیش روی توسعهدهندگان قرار دهند. فرض کنید شما یک پروژه را مدیریت میکنید (مدیر پروژه). یک توسعهدهنده تغییراتی را در یک شاخه جدید ایجاد میکند و مایل است آن شاخه را در شاخه اصلی ادغام کند. فرد مذکور میتواند یک درخواست تغییر ایجاد کند تا به شما اطلاع دهد که کد وی را بررسی کنید. شما میتوانید در مورد تغییرات بحث کنید و نهایتا تصمیم بگیرید که آیا میخواهید آن را ادغام کنید یا خیر.
جمعبندی
در این مقاله به آموزش git و مفاهیم پایه و اولیه آن پرداختیم. سعی کردیم تا به پرسش گیت چیست؟ پاسخ دهیم. البته گیت ابزار قدرتمند و پیچیدهای است و صرفا با خواندن یک مقاله نمیتوانید به آن مسلط شوید. ممکن است مفاهیم ذکرشده در این مقاله برای شما گیجکننده باشد. دلیل آن این است که باید به صورت حرفهایتر در مستندات اصلی این ابزار به مطالعه بپردازید تا با جزئیات کار با آن آشنا شوید. در واقع گیت ابزاری رایگان است که برای مدیریت نسخههای یک پروژه به خصوص در صورتی که به شکل تیمی کار میکنید، بسیار مفید است. هدف ما از این مقاله صرفاً آشنایی شما با گیت بوده است. در صورت علاقه میتوانید به دورههای آموزشی یا کتابهایی که در این زمینه نگاشته شدهاند مراجعه کنید.
پاورقی:
- 1version control system
- 2git repository
- 3subfolder
- 4branching
- 5merging
- 6terminal
- 7graphical user interface
- 8Unix-based operating systems
- 9branch
- 10push
- 11master branch
- 12git pull
- 13pull requests