گیت : هیولای هزارپا

برای اولین پست قصد دارم گیت رو معرفی کنم. امیدوارم این پست مورد پسند همه دوستان باشه.لازم به ذکر است که قصدم تنها یک آشنایی با گیت است و هیچ آموزشی در مورد کار با این نرم افزار داده نمیشه.احتمالا تا کنون نام git به گوش‌تان خورده. در پایین قسمتی از توضیحات ویکی‌پدیا را در مورد این نرم‌افزار کنترل نسخه قدرتمند باهم میخوانیم.گیت یک نرم‌افزار کنترل نسخه و از مدل نرم‌افزارهای آزاد و متن‌باز برای بازنگری کد منبع توزیع شده و مدیریت منبع کد است، که برای دنبال کردن تغییر فایل‌های کامپیوتری و دنبال کردن کارهای انجام شده روی آن‌ها توسط افراد مختلف است. هدف اولیه این نرم‌افزار برای استفاده در پروژه‌های نرم‌افزاری بوده‌است ولی می‌توان از آن تنها برای دنبال کردن تغییر فایل‌ها هم استفاده کرد.گیت ابتدا برای توسعهٔ لینوکس توسط لینوس تروالدز به وجود آمد، اکنون پروژه‌های فراوانی از آن الهام گرفته‌اند. هر دایرکتوری کاری در گیت یک مخزن کامل با تاریخچهٔ کامل تغییرها و قابلیت بازنگری آن‌ها است. برای کار با آن نیازی به دسترسی به شبکه یا سرور مرکزی وجود ندارد.سیستم کنترل نسخهتصور کنید تیمی در نقطه های مختلف این کره خاکی دارند بر روی یک پروژه کار میکنند. هر چند نفر از اعضای این تیم باید روی یک بخش مشخص کار کنند. بعد از نوشتن کدها نیاز است تمام این کد ها بصورت یکپارچه جمع آوری، قسمت‌هایی که ممکن است تداخل داشته باشند حذف و در نهایت یک جا ذخیره شوند. شاید هم شخصی یا اشخاصی جایی اشتباه کردند و نیاز است به گذشته برگردند. اینجا است که نیاز به یک سیستم کنترل نسخه احساس میشود.یک پروژه به چندین شاخه میتوان تقسیم شود که هر یک روند خود را داشته باشدسیستم کنترل نسخه پروژه ما را به چند شاخه مختلف تبدیل میکند. هر شاخه نسبت به دیگری کاملا مجزا است. میتوان هر شاخه را پیش برد و در نهایت آن را به شاخه اصلی متصل کرد.موضع دوم، تهیه گزارش کامل افراد است که این مسئله دو خصوصیت اصلی دارد.به افراد نشانن میدهد که هر خط توسط چه شخصی نوشته شده.مثل یک ماشین زمان عمل میکند. یعنی به افراد این اجازه را میدهد که به گذشته بروند، مشکلی را بر طرف کنند و یا کد های از دست رفته را بازگردانند.انواع کنترل نسخه هانرم افزار های کنترل ورژن به دو دسته مختلف تقسیم میشوند که به شرح زیر است:Centralized :در این دسته تعدادی کاربر یا برنامه‌نویس همراه با یک سرور وجود دارد. تمام تغییرات به همراه یک تاریخچه دقیق در سرور ذخیره میشود. عبارت Centralized یا متمرکز در حقیقت از عملکرد این نوع نرم افزار ها می‌آید.نرم افزار Subversion از این روش استفاده میکند و یکی از رغیب های اصلی git است.Distributed : این دسته کاملا با برعکس Centralized عمل میکند. به این صورت که در این دسته هیچ سرور واحدی وجود ندارد. در حقیقت هر سیستم، خود به تنهایی که سرور محسوب میشود.این دسته هرچند نسبت به دسته دیگر پیچیدگی خود را دارد اما امنیت آن بیشتر است. چرا که تمام اطلاعات نه تنها در یک سرور خاص، بلکه در تمام سیستمهایی که دارند باهم بر روی یک پروژه کار میکنند ذخیره شده است.گیت (git) از این روش استفاده میکند.هر یک از این دو دسته شامل نرم افزار های بسیار است. میتوان با یک جستجوی ساده به لیست آنها دسترسی پیدا کنید.و اما گیت ...حالا که با مفهوم version control system آشنا شدیم میتوانیم بهتر از قبل گیت را بشناسیم.بصورت خلاصه git یک نرم‌افزار کنترل نسخه از نوع Distributed است. این نرم‌افزار در سال ۲۰۰۵ توسط آقای لینوس بندیکت توروالدز (توسعه دهنده و معمار ارشد هسته لینوکس) توسعه یافت.سرویس‌های هاستینگ سورس‌کدبعد از عمومی شدن گیت، به سرعت در میان برنامه نویسان شروع به رشد کرد. از این رو وب‌سایت های بسیاری شروع به خدمات دهی به کاربران گیت کردند. این وب‌سایت ها برای ساخت مخازن مختلف، سرور های قدرتمندی را در خدمت برنامه نویسان گذاشتند که تعدادی از آنها را معرفی میکنیم.۱. GitHub :یکی از مشهور ترین و ایمن‌ترین پلتفرم های هاستینگ برای میزبانی از پروژه نرم‌افزاری میباشد. چندی پیش این وب سایت توسط مایکروسافت خریداری شد. روزانه چند میلیون کامیت در این وب سایت زده میشود.۲. GitLab :یکی دیگر از پلتفرم‌ها است که بصورت متن ‌باز ارائه شده. خیلی از افراد گیت‌لب را رقیب اصلی گیت‌هاب میدانند.مهمترین ویژگی گیت‌لب، خدمات رایگانی بود که ارائه میداد، خدماتی که گیت‌هاب از آن کسب در آمد میکرد.‌امروزه تعداد زیادی از خدمات گیت‌هاب رایگان شده است. همین مسئله باعث سخت شدن انتخاب میشود.۳. GitBucket :یک پلتفرم گیت اپن‌سورس، با قابلیت توسعهٔ بالا است. گیت‌باکت در ماشین مجازی جاوا اجرا میشود.این پلتفرم ویژگی‌هایی همچون امکان بررسی ریپازیتوری، پیگیری خطا، پول ریکوئست یک یا چند کامیت در بِرنچ‌های متفاوت، داکیومنت و ویکی، ای‌پی‌آی سازگار با گیت‌هاب و همچنین یک سیستم مبتنی بر پلاگین برای توسعه ویژگی‌های اصلی آن دارا است.۴. Gitea :یک سرویس اپن‌سورس و رایگان است. تنها هدف و اصلی ترین دلیل بوجود آمدنش راحتی در انجام کار است. هرچند ممکن است خیلی از افراد این سرویس را نشناسند، اما بعد از کار با آن شیفته راحتیش میشوند.۵. GitKranken :محیط خشک و ترمینالی گیت را به یک محیط گرافیکی و زیبا تبدیل کرده. این یکی از اصلی ترین دلیل های شهرتش است.گیت‌لب بزرگترین رقیب برای گیت‌هاب به حساب می آید.همیشه جنگ بین نرم افزار ها و ارائه دهنگان سرویس های مختلف زیاد بوده. هرکس تبلیغ خود را میکند و خدمات بخصوص خود را میدهد. این مسئله باعث گیچ شدن تازه وارد ها میشود. اما تنها چیزی که اینجا مهم است این است که شما دارید از Git استفاده میکنید. تک تک وب سایت ها را سر بزنید. با هر یک که راحت هستید شروع به کار کنید. شاید هر یک از نظر خدمات گوناگون با یکدیگر متفاوت باشند اما همه یک کار را میکنند.ساختار و عمل کرد گیتگیت از سه مرحله ساخته شده که به شرح زیر است:Working Directory :مسیر اصلی و پوشه پایه‌ای نرم‌افزار شما است. اگر هر کد در این مرحله باشد یعنی در گیت جایی نگرفته. این مرحله زمانی اتفاق میوفتد که یا نرم‌افزار را تازه به گیت معرفی کرده باشید و یا تغییری در کد ها یا پوشه ها ایجاد کرده باشید.Staging Area :در اینجا یک قدم به ثبت پوشه و کد هایتان در داخل گیت نزدیک تر میشویم. این مرحله برای ذخیره تغییرات است و در این مرحله میتوانید کدهای جدیدتان را با قبل مقایسه کنید.این مرحله به Stage شهرت دارد.Git Directory :این مرحله آخرین مرحله گیت است. در اینجا است که گیت وظیفه های خود را انجام میدهد و کدها را بصورت یکپارچه ذخیره میکند.بهتر است بدانید که کدهای شما در کدام مرحله از گیت است و این مرحله دقیقا چه وظیفه‌ای دارد. چرا که بهتر میتوانید گیت را درک و با آن کار کنید.چند خط پایانیاین مقاله را تنها برای آشنایی افراد با گیت نوشتم. مسلما اگر شما ندانید گیت چیست، خیلی سخت متوجه میشوید که چگونه باید باهاش کار کرد .چون قصد آموزش نداشتم، به زبانی ساده و خلاصه موارد مهم را عنوان کردم، اما این دلیلی نمیشود که بگوییم گیت همین است و بس. گستردگی گیت به قدری است که شایستگی رتبه اول در لیست سیستم‌های کنترل نسخه را دارد.پست ها و مقاله های بیشتر من را میتوانید هم در ویرگول و هم در وب سایت آموزشی اندروید‌آرنا دنبال کنید.منبعبا نظر دادن هم من رو برای بهتر نوشتن کمک میکنید و هم به من انگیزه میدید که بیشتر بنویسم