به طور خلاصه، گیت (Git) یک سیستم توزیع شده کنترل ورژن متن باز (Open Source)اوپن سورس یا متن باز چیست؟ اوپن سورس به چه معناست؟اوپن سورس یا متن باز چیست؟ این صفحه عالی به بررسی این موارد و همچنین تاریخچه نرم افزار متن باز و نحوه به کارگیری متن باز در توسعه نرم افزار پرداخته است است که تحت لایسنس عمومی GNU قرار دارد. سیستم های کنترل ورژن همانند گیت بهطور کلی برای مدیریت فرآیند تولید نرمافزار و مدیریت سورس کدها، نگهداری، امنیت و بسیاری از موارد دیگر مورد استفاده قرار میگیرند. سیستم گیت تمامی تغییرات اعمال شده روی فایلها را در طول زمان بهصورت سلسلهمراتب ذخیره میکند. این کار در هر مرحله از فرایند ذخیرهسازی در گیت انجام میشود؛ همچنین بحث Integrity یا جامعیت در تمامی مراحل گیت وجود دارد؛ یعنی با توجه به این که توسعه دهندگان مختلفی بر روی یک مخزن اطلاعاتی کار میکنند، اما هیچ تداخلی در کدهای ذخیره شدهی مخزن وجود ندارد و هیچ تغییر ناخواستهای در اطلاعات به وجود نمیآید، همچنین، کاربران قادر هستند تا به ورژنهای قدیمیتر نرمافزار خود بازگردند و تغییرات اعمال شده را مقایسه کنند یا تغییر دهند.
از ویژگی های دیگر گیت میتوان به ایجاد شاخه (Branch) و ادغام آنها (Merge) اشاره کرد. به این ترتیب هر توسعه دهنده میتواند روی وظایف مربوط به خود بر روی کد تمرکز کند و در آخر تمامی تغییرات بهصورت یک ورژن یکپارچه ادغام شوند. منظور از مخزن یا Repository همان پوشه یا Folder پروژه است که دارای دایرکتوری .git/ میباشد. سیستم کنترل ورژن گیت در حال حاضر معروفترین سیستم است که در اکثر شرکتهای تولید برنامههای مبتنی بر کد استفاده میشود. در ادامهی این مقاله با ویژگیها و نحوه کار کردن با گیت بیشتر آشنا میشویم.
گیت چگونه کار میکند؟
از آنجا که گیت یک سیستم توزیع شده است، میتوان از آن با و یا بدون یک مخزن متمرکز (Central Repository) استفاده کرد. بر خلاف سیستمهای ورژن کنترل متمرکز که به یک سرور و یا سرویس میزبان برای نگهداری مخزن اولیه نیاز دارند، در گیت هر کاربر یک کپی محلی یا یک کلون (Clone) در سیستم خودش دارد که شامل تمامی تاریخچه ورژن پروژه مربوطه میباشد. به این ترتیب هر یک از این کاربرها و سیستمهایشان نقش یک پشتیبان (Backup) را بازی میکند و باعث میشود تا سیستم دچار Single Point of Failure نشود؛ همچنین کاربران در زمان وصل نبودن به اینترنت نیز میتوانند برروی پروژه کار کنند.
بعد از این که گیت بر روی سیستم ما نصب شد، قادر هستیم تا با استفاده از دستورات مربوط به گیت در یک محیط ترمینالی و یا در محیطهایی که دارای رابط کاربری گرافیکی (GUI)رابط کاربری گرافیکی چیست؟این صفحه عالی به معرفی رابط کاربری گرافیکی پرداخته و نحوه عملکرد رابط کاربری گرافیکی و بهترین زبان های برنامه نویسی برای رابط کاربری گرافیکی را معرفی کرده مانند گیت هابگیت هاب چیست؟ نحوه کار و استفاده از گیت هاب چگونه است؟این مقاله عالی بررسی کرده که گیت هاب چگونه کار میکند؟ و همچنین به بررسی کاربرد های گیت هاب و شروع کار با گیت هاب پرداخته است دسکتاپ، به تعامل با گیت بپردازیم. ما میتوانیم پروژهای مربوط به خودمان بسازیم و یا بر روی پروژههای ایجاد شده با پیوستن به آنها کار کنیم. برای پیوستن به یک پروژه، مخزن مربوط به آن پروژه را به اصطلاح کلون میکنیم. به این ترتیب یک کپی از مخزن مورد نظر در سیستممان ایجاد میشود. تمامی فایلهایی که در مخزن محلی کاربر است، همیشه در یکی از 3 حالت زیر قرار میگیرند. به هرکدام از این حالتها در گیت، یک Stage (استیج) میگویند.
- Modified: در این Stage، کاربر فایلهای پروژه را تغییر داده است اما آنها را وارد فاز Staged یا Committed نکرده است. در این صورت تنها تغییرات انجام شده بر روی سیستم محلی طرف وجود دارد و بهصورت نهایی درنیامده است. لازم به ذکر است که تمامی فایلهای پوشه پروژه بعد از تغییر در این وضعیت قرار میگیرند تا این که وارد فاز بعدی شوند.
- Staged: فاز قبل از Commit کردن، فاز Staged است، به وسیله این کار کاربر میگوید که تغییراتش آماده نهایی شدن است. حالا این که چرا یک نفر باید این کار را انجام دهد برمیگردد به ویژگیهایی که در این مرحله در اختیار توسعه دهندگان قرار میگیرد. فایلهای ذخیره شده در Staged، در مکان خاصی اضافه میشوند که قابلیت بررسی مجدد و مقایسه آن با کد و یا ورژن فعلی پروژه را دارد. بعد از مقایسه و بررسی نهایی تغییرات، وارد فاز کامیت کردن میشویم.
- Committed: در این مرحله کاربر به وسیلهی دستور commit، تغییرات را وارد فاز نهایی و ذخیرهسازی میکند. هر کامیت نماینده یک ورژن یا یک نسخه از پروژه است که دارای یک هش کد منحصربهفرد ایجاد شده توسط الگوریتمالگوریتم چیست به زبان ساده و با مثال های فراواندر این مقاله به زبان بسیار ساده و با مثال های متعدد توضیح داده شده که الگوریتم چیست و چه کاربردهایی دارد SHA1 است.
بعد از این که کاربران تغییرات اعمال شده را Commit کردند، تغییرات در مخزن Local ذخیره میشود. برای اینکه تغییرات اعمال شده به مخزن مرکزی یا مخزن بقیه کاربران برسد، باید از Push استفاده کنیم. به وسیله دستور push، تمامی تغییرات به مخزن اصلی فرستاده میشود. حال اگر کاربر دیگری قصد استفاده از این تغییرات را داشته باشد، باید از دستور pull استفاده کند تا جدید ترین نسخه را از مخزن اصلی دریافت کند؛ به عنوان مثال فرض کنید کاربر "الف" یک ویژگی جدیدی به کدها اضافه کرده است و کاربر "ب" و "پ" میخواهند از آن ویژگی جدید استفاده کنند. برای این کار، آنها در گیت خود از دستور pull استفاده میکنند تا این ویژگی جدید که در ورژن جدیدتر پروژه قرار دارد، وارد مخزن محلی آنها شود.
مزایای سیستم گیت
سیستم کنترل ورژن گیت دارای مزایای فراوانی میباشد که مهمترین آنها را در لیست زیر آوردهایم:
- عملکرد (Performance): یکی از خاصیتهای مهم گیت، پرفورمنس بالای آن است. ثبت تغییرات اعمال شده، ایجاد و ادغام شاخهها، مقایسهی ورژنها و... همگی بهینه شدهاند؛ بهطوری که در زمان بسیار کوتاهی انجام میشوند.
- امنیت (Security): امنیت یکی از ویژگیهای Git است. هیچکدام از محتوای فایلها، دایرکتوریها، تگها و... کوچکترین تغییری نمیکنند و تمامی آنها با الگوریتم SHA1 درهمسازی شدهاند. همین امر باعث میشود از تغییرات تاریخچه گیت چه به صورت ناخواسته و چه توسط افراد خرابکار جلوگیری شود.
- انعطاف پذیری (Flexibility): گیت یک سیستم انعطافپذیر است. تمامی پروژهها و روندهای توسعه نرمافزار به وسیلهی آن قابل پیادهسازی هستند و وابسته به تکنیک خاصی نیست. از Git هم میتوان در پروژههای کوچک و هم در پروژههای بسیار بزرگ استفاده کرد.
نحوه کار کردن با گیت
هرچند که گیت دارای ویژگیها و دستورات زیادی است، اما کار کردن با دستورات ابتدایی آن بسیار ساده است و تنها به وسیله همین دستورات میتوانیم بر روی توسعهی یک پروژه مشارکت داشته باشیم.
برای شروع یک پروژه، وارد دایرکتوری مربوطه میشویم و دستور زیر را وارد میکنیم.
git init
بعد از ایجاد شدن پروژه، یک فایل txt با نام first_file در دایرکتوری مربوطه ایجاد میکنیم و در آن جملهی !Hello World را مینویسیم و ذخیره میکنیم.
در هر مرحله از کار برروی پروژه میتوانیم با دستور زیر از وضعیت فعلی مخزن مطلع شویم:
git status
همانطور که در تصویر بالا مشاهده میکنیم، فایل first_file در قسمت Untraced Files با رنگ قرمز مشخص شده است. به این معنی که در فاز Modified قرار دارد. برای فرستادن به فاز Staged باید از دستور زیر استفاده کنیم:
git add <filename_one>
با استفاده از دستور بالا میتوانیم نام فایلهایی که میخواهیم وارد فاز Staged شوند را بنویسیم. اگر قصدمان این باشد تا تمامی فایلها را به فاز Staged منتقل کنیم، میتوانیم به جای نام فایلها تنها از یک نقطه یا "." استفاده کنیم.
git add .
اکنون بار دیگر از دستور git status استفاده میکنیم تا از وضعیت کنونی مطلع شویم.
همانطور که مشاهده میکنید، first_file.txt به رنگ سبز درآمده و آمادهی کامیت شدن است. برای کامیت کردن و ثبت نهایی از دستور زیر استفاده میکنیم:
git commit -m "<add a commit message here>"
هر کامیتی دارای یک پیام است که مربوط به همان کامیت میباشد. برای مثال، اگر تغییرات فایل شامل رفع ایراد باشد، میتوانید اشاره کنید که فلان باگ برطرف شده است یا مثلاً ویژگی جدیدی اضافه شده است.
اکنون مجدداً دستور git status را وارد میکنیم.
در پیغامی که توسط گیت در ترمینال چاپ شده است درمییابیم که تمامی تغییرات اعمال شده است و دیگر هیچ تغییری برای کامیت کردن وجود ندارد. اکنون اگر فایل دیگری ایجاد کنیم یا فایلهای موجود را تغییر دهیم، باید مراحل بالا را مجدداً انجام دهیم.
به وسیله دستور log میتوان تمامی تاریخچه مخزنمان را مشاهده کنیم؛ از جمله زمان ایجاد شدن کامیتها، ایجاد کنندهی کامیت، هش مربوط به کامیتها و...
git log
برای ارسال به ریپازیتوری یا مخزن اصلی نیز از دستور push استفاده میشود:
git push ‘remote_name’ ‘branch_name’
اکنون اگر کاربری در حال استفاده از ریپازیتوری ایجاد شده توسط ما باشد و بخواهد تا مخزن محلی خودش را بهروزرسانی کند، باید از دستور زیر استفاده کند تا آخرین تغییرات ایجاد شده را دریافت کند:
git pull ‘remote_name’ ‘branch_name’
آخرین دستوری که معرفی میکنیم، دستور کلون کردن است. این دستور برای دریافت یک نسخه کپی از مخزنهای راه دور (مثلاً گیتهاب) میباشد. با استفاده از URL هر مخزن، میتوانید بهسادگی با دستور زیر آن را کلون کنید:
git clone [repository url]
تاریخچه گیت
خالق گیت، لینوس توروالدز (Linus Torvalds) خالق سیستم عاملسیستم عامل چیست به زبان ساده، چرا باید از OS استفاده کنیم؟این مقاله عالی به معرفی سیستم عامل (Operating System|OS) به زبان ساده پرداخته، همچنین بررسی کرده که چرا باید از سیستم عامل استفاده کنیم لینوکس میباشد. لینوس به همراه بقیه اعضای توسعه دهنده لینوکس، در سال 2005 سیستم گیت را عرضه کرد؛ زیرا در آن زمان نبود یک سیستم کنترل ورژن رایگان و متن باز برای توسعه کرنل (Kernel) لینوکس احساس میشد. آنها نیاز به سیستمی داشتند تا بتوانند در مقیاس بزرگ به همکاری و توسعه بپردازند و پرفورمنس وظایف مشخصی را بالا ببرند؛ مثلا یک تغییر جدید یا Patch را در کمتر از چند ثانیه اعمال کنند، به این ترتیب به فکر تولید سیستم Git افتادند. امروزه تقریباً در تمامی شرکتهای برنامهسازی از گیت و یا یک تعمیمی از آن استفاده میکنند.
جمعبندی
سیستم کنترل ورژن گیت یکی از محبوبترین سیستم های کنترل ورژن است. یادگیری و کار با دستورات اولیه آن ساده، اما بسیار کاربردی است. اگر قصد کار کردن در یک تیم توسعه دهنده در شرکتی را داشته باشید، آشنایی با دستورات گیت از نیازمندیهای اولیه است. بنابراین اگر یک برنامهنویس هستید و تاکنون با سیستم کنترل ورژن گیت کار نکردهاید، پیشنهاد میکنیم تا در فرصت مناسبی حتماً به یادگیری این سیستم بپردازید. در این مقاله به معرفی سیستم گیت پرداختیم و نکات مهم و مزایای آن را بررسی کردیم. همچنین با معرفی دستورات اولیه سعی کردیم تا به جنبههای مختلف این سیستم بپردازیم.
گیت چیست؟
به طور خلاصه، گیت (Git) یک سیستم توزیع شده ی کنترل ورژن کد باز است که تحت لایسنس عمومی GNU قرار دارد.
چرا از گیت استفاده می شود؟
به طور کلی در فرآیند توسعهی نرمافزار، از گیت برای مدیریت سورس کد استفاده میشود. به وسیلهی گیت میتوان تغییرات را مشاهده و ردیابی کرد، همچنین سیستم گیت اجازه میدهد تا اعضای مختلف تیم به صورت همزمان برروی یک پروژه کار کنند.