آموزش گیت (مقدمه)

مقدمه‌ای بر دورهٔ آموزش گیت


با توجه به این که دورهٔ آموزش گیت در پلتفرم گنو/لینوکس توزیع اوبونتو تألیف شده است، لذا آشنایی با دستورات پایه‌ای لینوکس الزامی است که در همین راستا می‌توانید پیش از شروع این دوره و یا به صورت هم‌زمان به دورهٔ آموزش لینوکسدر سکان آکادمی مراجعه نمایید.

Version Control چیست؟


در این آموزش قصد داریم تا با سازوکار سیستم‌های ورژن کنترل، مزایای استفاده از آن‌ها، انواع‌شان و همچنین دلایل لزوم استفاده از یک سیستم ورژن کنترل همچون گیت آشنا شویم.

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

اساساً می‌توان وی‌سی‌اس را همچون یک دیتابیسی تلقی کرد که این وظیفه را دارا است تا نسخه‌های مختلف و همچنین تغییراتی که در جای‌جای پروژه انجام می‌دهیم را در قالب یک سری ورژن (نسخه) ذخیره‌ سازد. به طور مثال،‌ وقتی به یکی از نسخه‌های پیشین پروژه رجوع می‌کنیم، دقیقاً می‌توانیم به تغییرات صورت‌گرفته پی برده و آن را با نسخه‌های جدید مقایسه نماییم (آنچه در ارتباط با سیستم‌های کنترل نسخه حائز اهمیت است این که چنین سیستم‌هایی می‌توانند برای هر نوع پروژه‌ای مورد استفاده قرار گیرند؛ از یک وب‌سایت ساده گرفته تا یک پروژه‌ٔ نرم‌افزاری اینترپرایز و یا حتی یک کتاب یا پروژهٔ طراحی.)

مزایای استفاده از VCS کدامند؟

اساساً استفاده از یک سیستم ورژن کنترل مزایای بسیاری را برای گروه‌های کاری به ارمغان می‌آورد که برخی از مهم‌ترین آن‌ها عبارتند از:

– کار گروهی: بدون استفاده از یک وی‌سی‌اس، انجام تیم‌وُرک در یک پروژهٔ نرم‌افزاری بسیار دشوار شده و همواره این احتمال وجود دارد که اعضای تیم مرتکب خطا گردند. در چنین فضایی، اعضای تیم‌ می‌باید به یک فولدری که از طریق شبکه روی سیستم‌ تمامی‌ آن‌ها به اشتراک گذاشته شده دسترسی یافته و به طور مثال اگر یکی از اعضاء شروع به کار روی فولدری تحت عنوان first_folder کرد، حتماً باید سایر اعضای تیم را از این موضوع مطلع ساخته تا ایشان سهواً‌ شروع به کار روی همان فولدر نکنند!

اما با شروعِ استفاده از یک وی‌سی‌اس، علاوه بر این که اعضای تیم‌ می‌توانند بدون هیچ‌ گونه نگرانی شروع به کار روی پروژه‌ای واحد کنند، ایشان قادر خواهند بود تا روی بخش‌های یکسانی از پروژه نیز کار نموده و در نهایت با استفاده از دستورات خاصی تمامی تغییرات صورت‌گرفته را با یکدیگر ادغام نمایند مضاف بر این که اعضای تیم الزاماً نیازی نخواهند داشت تا نزدیک به یکدیگر باشند، بلکه از سراسر دنیا می‌توانند روی پروژه‌ای واحد (همچون کِرنِل لینوکس)‌ کار کنند.

– ذخیرهٔ نسخه‌های مختلف یک پروژه: یکی از مزایای منحصربه‌فردی که یک سیستم کنترل نسخه برای‌مان به ارمغان می‌آورد آن است که می‌توانیم دست به نسخه‌بندی پروژهٔ خود بزنیم که در غیر این صورت نسخه‌بندی پروژه‌ در قالب نام‌هایی همچون sokanacademy-2020-06-23-v1 و sokanacademy-2020-06-23-v2 الی آخر کاری است که بالاخره روزی دردسرساز خواهد شد زیرا در چنین شرایطی پرسش کلیدی آن است که «از کجا معلوم می‌شود که در هر نسخه چه تغییراتی صورت گرفته است؟» اما این در حالی است که با استفاده از یک وی‌سی‌اس به سادگی می‌توان کلیهٔ‌ تغییرات در پوشه‌های مختلف پروژه و حتی تک‌تک فایل‌ها و آپدیت‌هایی که روی آن‌ها صورت گرفته را رصد کرد.

همچنین لازم به یادآوری است از آنجا که چنین سیستم‌هایی توسعه‌دهنده را موظف می‌کنند تا در صورت ایجاد یک سری تغییرات، توضیحاتی تکمیلی در ارتباط با نوع تغییرات صورت‌گرفته درج نمایند،‌ احتمال این که در آینده با مراجعه به نسخه‌های مختلف نرم‌افزار دچار سردرگمی شویم به حداقل خواهد رسید و دقیقاً خواهیم دانست که هر نسخه حاوی چه تغییراتی است.

– رجوع به نسخه‌های پیشین: در صنعت توسعه نرم‌افزار به کَرات پیش می‌آید که نیاز پیدا خواهیم کرد تا علیرغم نوشتن کدهای جدید، گاهی نسخه‌های قبلی نرم‌افزار را دیپلوی نماییم که در چنین شرایطی سیستم‌های ورژن کنترل به سادگی چنین امکانی را در اختیارمان می‌گذارند.

– بک‌آپ: یکی دیگر از مزیت‌های سیستم‌های کنترل نسخه‌ای همچون گیت آن است که نقش یک سیستم بک‌آپ‌گیری را بازی می‌کنند به طوری که تک‌تک اعضای تیم یک نسخهٔ کامل از پروژه را خواهند داشت و در صورتی که مشکلی برای نسخهٔ‌ اختصاصی یکی از اعضاء‌ پیش آید، این تضمین وجود دارد که کماکان در سیستمی دیگر چندین کپی از نسخهٔ اصلی پروژه در دسترس است.

درآمدی بر انواع VCS

به طور کلی، می‌توان گفت که سیستم‌های کنترل نسخه را می‌توان به دو گروه کلی Centralized و Distributed تقسیم‌بندی کرد با این توضیح که گروه اول به سیستم‌هایی اطلاق می‌گردد که تمامی اعضای تیم روی یک به اصطلاح ریپازیتوری (منبع) که در فضای اینترنت در دسترس است کار می‌کنند که از جملهٔ چنین سیستم‌هایی می‌توان به Subversion اشاره کرد.

در مقابل، Git یک سیستم کنترل نسخهٔ‌ به اصطلاح Distributed است با این توضیح که چنین ابزاری این امکان را در اختیار توسعه‌دهنده قرار می‌دهد تا یک نسخهٔ کامل (حاوی تاریخچه‌ای از تغییرات گذشته) از پروژه را از سرور دریافت نموده سپس به صورت لوکال و بدون نیاز به دسترسی به اینترنت خواهد توانست شروع به کار و اِعمال تغییرات روی پروژه نماید سپس هر زمانی که تمایل داشت تا دیگر اعضای تیم نیز به تغییرات صور‌ت‌گرفته توسط وی دست یابند، می‌تواند به اینترنت کانکت شده و تغییرات را روی سرور اصلی دیپلوی نماید.

چرا می‌باید کار با یک VCS را بیاموزیم؟

در صنعت توسعهٔ نرم‌افزار به طور قطع می‌توان گفت که هیچ توسعه‌دهنده‌ای را نمی‌توان یافت که حرفه‌ای باشد اما کار با یک یا چند نوع از سیستم‌های ورژن کنترل را بلد نباشد! به عبارت دیگر، تسلط به یکی از این سیستم‌‌ها در کنار دیگری مهارت‌های کدنویسی کلید ورود به شرکت‌های نرم‌افزاری حرفه‌‌ای است و چنانچه یک کدآموز قصد داشته باشد تا هر چه سریع‌تر خود را از گروه‌ توسعه‌دهندگان مبتدی و تازه‌کار مجزا سازد،‌ می‌باید کار با یکی از این سیستم‌ها را بیاموزد که در این دورهٔ آموزشی تمرکز روی ابزار Git است.

معرفی برخی از مطرح‌ترین سرویس‌های هاستینگ سورس‌کد


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

GitHub
GitHub علاوه بر این که یک پلتفرم هاستینگ قدرتمند و امن برای میزبانی پروژه‌های نرم‌افزاری با استفاده از سیستم ورژن کنترل Git می‌باشد، همچنین به عنوان یک پلتفرم محبوب برای پروژه‌های اپن‌سورس شناخته شده است که به تملک مایکروسافت درآمده است (نیاز به توضیح نیست که رویکرد متفاوت مایکروسافت در سال‌های اخیر بر این استوار بوده تا با جامعهٔ اپن‌سورس سازگارتر شود؛ در همین راستا، این کمپانی خود را به عنوان یک حامی جامعهٔ اپن‌سورس معرفی کرده، برخی از پروژه‌های خود را اپن‌سورس نموده و همچنین به بنیاد لینوکس پیوسته است.)

آنچه مسلم است این که دور از انتظار نیست که کنترل گیت‌هاب توسط مایکروسافت دولوپرهای اپن‌سورس را ناگزیر بر پیدا کردن جایگزینی برای پروژه‌های اپن‌سورس خود کند که در همین راستا در ادامه با سرویس‌های جایگزین گیت‌هاب آشنا خواهیم شد.

GitLab
GitLab یک سرویس اپن‌سورس، قدرتمند و امن برای مدیریت به اصطلاح Life Cycle پروسهٔ توسعه نرم‌افزار است. از دید بسیاری از دولوپرها و فعلان کامیونیتی اپن‌سورس، گیت‌لب اولین گزینۀ جایگزین برای گیت‌هاب است چرا که دارای قابلیت‌هایی بیشماری است که از آن جمله می‌توان به پشتیبانی از یک سری به اصطلاح MileStone گروهی اشاره کرد که با استفاده از آن‌ها دولوپرها می‌توانند خطاها و پول ریئکوست برای انجام تَسکی در یک محدودۀ زمانی معین را پیگیری کنند.

همچنین گیت‌لب قابلیت پیگیری خطاها، بوردهایی قابل‌تنظیم برای یک سری به‌ اصطلاح Issue مربوط به گروه‌ها، انتقال آن‌ها بین پروژه‌ها و موارد دیگر را پشتیبانی می‌کند (Issue Board یک ابزار مدیریت پروژهٔ نرم‌افزاری از طرف تیم GitLab است که برای برنامه‌ریزی، سازمان‌دهی و ویژوالیزیشن یک ورک‌فلو به منظور انتشار یک ویژگی یا محصول، مورد استفاده قرار می‌گیرد.)

به علاوه این که کاربران سرویس گیت‌لب می‌توانند هم ریپازیتوری پابلیک (عمومی) داشته باشند و هم ریپازیتوری پِرایوِت (شخصی) که همگی رایگان هستند؛ اما اگر به دنبال قابلیت‌های حرفه‌ای‌تر می‌گردید، می‌باید از سرویس‌های پریمویم (پولی) گیت‌لب استفاده کنید!

BitBucket
Bitbucket یک پلتفرم توسعهٔ قدرتمند، کاملاً مقیاس‌پذیر و با کارایی بالا است که برای تیم‌های نرم‌افزاری حرفه‌ای طراحی شده است. دولوپرها به راحتی می‌توانند ریپازیتوری GitHub خود را به Bitbucket و با چند گام ساده ایمپورت کنند (همچنین Bitbucket از ادغام تغییرات به اصطلاح Third Party نیز پشتیبانی می‌کند.)

از جمله ویژگی‌های قابل‌توجه Bitbucket می‌توان به جستجوی کد، پشتیبانی از پول ریکوئست برای ادغام یک یا چند کامیت در بِرنچ‌های متفاوت، انواع مدل‌های دیپلویمنت، بررسی کد، پیگیری خطا و پِرمیشن به بِرنچ‌ها به منظور محافظت از وُرک‌فلوی دولوپرهای مختلف و با سطح دسترسی‌های متفاوت اشاره کرد (همچنین لازم به ذکر است که این سرویس بیش از آنکه به درد دولوپرهای فریلنسر بخورد، به درد برنامه‌نویسانی می‌خورد که تمایل به کار به صورت تیمی دارند.)

Gitea
Gitea یک سرویس اپن‌سورس و رایگان است که کار با آن بسیار ساده است. این سرویس به‌ منزلۀ یک راه‌کار ساده و سریع برای راه‌اندازی یک سرویس گیت با قابلیت ارائۀ هاستینگ برای ریپازیتوری‌های خصوصی دولوپرها به منظور توسعهٔ نرم‌افزارهای اپن‌سورس است (برای کسب اطلاعات بیشتر، می‌توانید به مقالهٔ Gitea: سرویس به اصطلاح Self-hosted اپن‌سورس برای Git مراجعه نمایید.)

همچنین نرم‌افزار Gitea نسخه‌ای توسعه ‌یافته توسط کامیونیتی اپن‌سورس از روی نرم‌افزار Gogs است. در واقع، این سرویس یک ابزار هاستینگ سورس‌کد است که با زبان Go نوشته شده و تحت لیسانس MIT منتشر شده مضاف بر این که کراس‌پلتفرم بوده و قابلیت اجرا بر روی ویندوز، مک، لینوکس و سایر پلتفرم‌ها را دارا است.

Gogs 
Gogs یک سرویس گیت رایگان، اپن‌سورس، سبک، توسعه‌پذیر و کراس‌پلتفرم با قابلیت هاستینگ ریپازیتوری‌های خصوصی است. نصب Gogs آسان است و به ‌اندازه‌ای کم‌حجم می‌باشد که بر روی یک دیوایس Raspberry Pi نیز اجرا می‌شود. Gogs احتمالاً ساده‌ترین و سریع‌ترین روش برای راه‌اندازی یک سرویس گیت با قابلیت هاستینگ پروژه‌‌های اپن‌سورس است؛ همچنین این سرویس یک کپی کامل از ریپازیتوری‌های GitHub بوده که با زبان Go نوشته شده است.

SourceForge
Sourceforge یک پلتفرم توسعه و توزیع نرم‌افزاری است که به طور خاص برای پروژه‌های اپن‌سورس ساخته شده است و در Apache Allura میزبانی می‌شود. Sourceforge قابلیت‌هایی همچون ریپازیتوری کد، دایرکتوری اپن‌سورس، ابزاری یکپارچه برای پیگیری خطاها و ابزارهایی به منظور تهیۀ داکیومنت برای پروژه را ارائه می‌دهد (لازم به ذکر است که این پلتفرم برای میزبانی پروژه‌هایی مانند Apache OpenOffice ،FileZilla استفاده می‌شود.) 

Allura 
Allura یک ابزار رایگان برای پیگیری خطا، هاستینگ سورس‌کد پروژه‌ها و … را فراهم می‌کند و به دولوپرها این امکان را می‌دهد تا تغییرات خود در کدها را به سادگی ذخیره کنند. همچنین مجموعه‌ای از ابزارها برای کمک به همکاری دولوپرها در پروژه‌های نرم‌افزاری را فراهم می‌کند و دارای ویژگی‌هایی نظیر پیگیری خطا، جستجوی قدرتمند، هایلایت کردن سینتکس، ایجاد کپی از ریپازیتوری‌ها و ادغام آن‌ها، درخواست برای ادغام یک یا چند کامیت در بِرنچ‌های متفاوت و مستندسازی پروژه است (همچنین این سرویس دارای قابلیت هاستینگ برای ریپازیتوری‌های خصوصی دولوپرها نیز می‌باشد.)

Launchpad
Launchpad یک پلتفرم رایگان و توسعه یافته به منظور ساخت، مدیریت و همکاری در پروژه‌های نرم‌افزاری برای دولوپرها است که توسط کمپانی Canonical، سازندهٔ توزیع اوبونتو، ساخته شده است. این پلتفرم شامل ویژگی‌هایی همچون میزبانی کد، ساخت پکیج‌های اوبونتو، پیگیری باگ‌های سورس‌کد، بررسی سورس‌کد و غیره است؛ با این حال گرچه Launchpad سال‌ها مورد استفادهٔ برخی دولوپرها بوده است، اما به عنوان جایگزین GitHub در این لیست محبوبیت زیادی به دست نیاورده است چرا که اکثر پروژه‌های قرار گرفته روی این سرویس پروژه‌های مرتبط با سیستم‌عامل گنو/لینوکس بوده و در حالت کلی در میان دولوپرها به عنوان یک سرویس‌هاستینگ #اوبونتو شناخته می‌شود.

Cloud Source Repositories
Cloud Source Repositories سرویسی از گوگل است که پس از فروپاشی Google Code، روی کار آمد. Cloud Source امکان اتصال به GitHub ،Bitbucket و سایر سرویس‌ها را دارا است. این سرویس امکان ذخیره‌سازی سورس‌کد را از طریق زیرساخت‌های گوگل ارائه می‌دهد؛ بدین معنی که کد و برنامه‌های شما در محیطی امن نگهداری می‌شوند.

AWS CodeCommit
AWS CodeCommit یک محیط هاستینگ امن و خصوصی ریپازیتوری گیت بوده و محصولی از آمازون است که مشابه ریپازیتوری Cloud Source گوگل است. این گزینه مخصوصاً برای زمانی مفید است که دولوپرها از دیگر محصولات AWS نیز استفاده می‌کنند چرا که به راحتی با این سرویس سینک می‌شوند. 

Phabricator
Phabricator یک پلتفرم میزبانی اپن‌سورس، قدرتمند، سریع و مقیاس‌پذیر است و مجموعه‌ای از ابزارهای مختلفی را برای ایجاد و همکاری در پروژه‌های نرم‌افزاری به شیوه‌ای سریع فراهم می‌کند. در واقع، Phabricator مجموعه‌ای از ابزارها برای توسعهٔ نرم‌افزار است که به شرکت‌های نرم‌افزاری کمک می‌کند تا نرم‌افزار بهتری تولید کنند مضاف بر این که شامل اپلیکیشن‌هایی برای بررسی کد، میزبانی ریپازیتوری، سیستم ورژن کنترل گیت، پیگیری خطا، مدیریت پروژه و غیره است.

GitBucket
GitBucket یک پلتفرم گیت اپن‌سورس، با قابلیت توسعهٔ بالا است که با زبان Scala توسعه یافته و در ماشین مجازی جاوا (JVM) اجرا می‌شود که برای آشنایی بیشتر با این زبان، می‌توانید به مقالات زیر مراجعه نمایید:

– آشنایی با زبان برنامه‌نویسی Scala
– 10 دلیل بر ضرورت یادگیری زبان Scala و برنامه‌نویسی فانکشنال

این پلتفرم ویژگی‌هایی همچون امکان بررسی ریپازیتوری، پیگیری خطا، پول ریکوئست یک یا چند کامیت در بِرنچ‌های متفاوت، داکیومنت و ویکی، ای‌پی‌آی سازگار با گیت‌هاب و همچنین یک سیستم مبتنی بر پلاگین برای توسعه ویژگی‌های اصلی آن دارا است.

GitPrep
GitPrep نرم‌افزاری است که رایگان بوده و با زبان Perl نوشته شده که امکان ایجاد یک کپی به صورت لوکال از ریپازیتوری‌های #گیت‌هاب را برای دولوپرها فراهم می‌آورد به طوری که می‌توانند با استفاده از این ابزار گیت را به صورت پرتابل در سیستم‌عامل‌های مبتنی بر یونیکس مثل گنو/لینوکس نصب کنند و یوزرها و ریپازیتوری‌هایی بدون محدودیت ایجاد کنند. در ضمن، این نرم‌افزار قابلیت پیگیری خطاها و همچنین وب سروری از پیش‌ تعریف‌ شده دارد.

GNU Savannah
GNU Savannah یک نرم‌افزار اپن‌سورس و رایگان از بنیاد Free Software Foundation است که در حال حاضر از جمله قابلیت‌هایی که این نرم‌افزار ارائه می‌دهد می‌توان به پشتیبانی از سیستم‌های ورژن کنترلی همچون Subversion ،Git و Mercurial کرد. با این حال، این نرم‌افزار برای کاربران تازه‌کار توصیه نمی‌شود چرا که راه‌اندازی و درک نحوۀ کار با آن کمی زمان‌بَر است.

Manuscript
Manuscript یک نرم‌افزار مدیریت سورس‌کد است که بر پایهٔ موتور FogBugz نوشته شده است که مجموعه‌ای از ابزارهای مختلف را در اختیار دولوپرها قرار می‌دهد تا بتوانند به سهولت دست به توسعهٔ‌ اپلیکیشن بزنند. همچنین این نرم‌افزار قابلیت ادغام با GitHub ،Google Docs و Glitch را نیز دارا است.

Beanstalk
Beanstalk یک پلتفرم قدرتمند، امن، با کارایی بالا و قابل‌اعتماد برای مدیریت ریپازیتوری‌های کد است و یک سرویس گیت ساده اما در عین حال حرفه‌ای را برای توسعه‌دهندگان به ارمغان می‌آورد. این پلتفرم برای بهبود وُرک‌فلوی کاری دولوپرها با استفاده از ویژگی‌هایی همچون بررسی کد، پیگیری خطا، آمار و ارقام مربوط به ریپازیتوری‌های مختلف، یادداشت‌های مربوط به دیپلوی نرم‌افزار، نوتیفیکیشن‌ها، نگهداری تاریخچهٔ مربوط به تمام کامیت‌ها و موارد دیگر طراحی شده است.

Beanstalk یک نرم‌افزار مدیریت کد مبتنی بر کلود است به طوری که امکان کدنویسی، کامیت، بررسی، بازبینی و دیپلوی را برای دولوپرها و به طور مستقیم از طریق مرورگر ایشان فراهم می‌کند.

GitKraken
GitKraken به دلیل برخورداری از یک رابط کاربری زیبا، بر سرعت و سهولت استفاده از سیستم ورژن کنترل گیت متمرکز می‌باشد و این همان چیزی است که دولوپرها، اعم از مبتدی و حرفه‌ای، را به این پلتفرم جذب می‌کند. همچنین GitKraken با ابزار Electron طراحی شده که این امکان را برای دولوپرها فراهم می‌کند تا بتوانند آن را روی سیستم‌عامل‌های مختلفی مانند ویندوز، مک و محیط لینوکس اجرا کنند (برای آشنایی بیشتر با الکترون، می‌توانید به مقالهٔElectron: پلتفرمی جهت توسعهٔ نرم‌افزار دسکتاپ برای ویندوز، لینوکس و مکینتاش مراجعه نمایید.)

GitKraken دارای یک دکمهٔ به اصطلاح Undo فوق‌العاده مفید است که به دولوپرها اجازه می‌دهد تا تغییراتی که سهواً انجام داده‌اند را خیلی سریع حذف کنند مضاف بر این که دارای قابلیت یکپارچه‌سازی با سرویس‌های محبوبی همچون GitHub ،Bitbucket و GitLab است که این فیچِر (قابلیت) موجب می‌شود تا توسعه‌دهندگان بتوانند به سادگی با ریپازیتوری‌های ریموت کار کنند.

Kallithea
Kallithea پروژه‌ای متعلق به بنیاد Software Freedom Conservancy بوده و یک سیستم مدیریت سورس‌کد تحت لیسانس GPL است که از دو سیستم ورژن کنترل Mercurial و Git پشتیبانی می‌کند و دارای یک اینترفیس تحت وب است که کار با آن را برای دولوپرها آسان می‌کند. همچنین دولوپرها می‌توانند Kallithea را بر روی سرورهای اختصاصی خود نصب نموده و سیستم ورژن کنترل مد نظر خود را انتخاب نمایند.

Tuleap
Tuleap یک سیستم مدیریت پروژه‌ای برای مدیریت چرخهٔ عمر اپلیکیشن، پروژه‌های مبتنی بر اجایل، مدیریت نیازمندی‌های نرم‌افزار و غیره است. Tuleap قابلیت‌هایی برای سیستم ایجاد می‌کند که امکان مدیریت سورس‌کد نرم‌افزار برای تیم‌ها (با استفاده از سیستم ورژن کنترل Subversion ،Git یا CVS)، اشتراک‌گذاری داکیومنت‌های فنی پروژه، پیگیری خطا، برقراری ارتباط با مشتریان و دیگر دولوپرهای فعال روی پروژه را فراهم می‌آورد.

آشنایی با تاریخچه، مزایا و برخی اصطلاحات رایج در Git


سیستم ورژن کنترل گیت توسط لینوس توروالدز (خالق کِرنِل لینوکس) به منظور توسعهٔ لینوکس به صورت گروهی خلق شد چرا که در آن بازه بسیاری از توسعه‌دهندگان لینوکس از استفادهٔ‌ سیستم کنترل نسخهٔ BitKeeper امتناع ورزیدند. در حقیقت، لینوس توروالدز تمایل داشت تا از یک سیستم توزیع‌شده همچون BitKeeper استفاده کند اما هیچ کدام از نرم‌افزارهایی که تا زمان به بازار عرضه شده بودند نیازش را مرتفع نمی‌ساختند و همین شد که توسعهٔ‌ Git در سوم آوریل 2005 شروع شد. واژهٔ Git در زبان کوچه و بازار بریتانیا به معنای «آدم نَچسب» است و وجه‌تسمیهٔ این سیستم نیز از آن سو است که لینوس توروالدز در جایی گفته است که «… من پروژه‌هایم را از روی شخصیتم نام‌گذاری می‌کنم!»

درآمدی بر مزایای سیستم کنترل نسخهٔ Git

پیش از این توضیح دادیم که انواع و اقسام سیستم‌های کنترل نسخه توسط شرکت‌های مختلف نرم‌‌افزاری به دنیا عرضه شده‌اند که یکی از محبوب‌ترین آن‌ها گیت می‌باشد اما ممکن است این پرسش شکل گیرد که «چرا گیت را باید انتخاب کنیم؟» که در پاسخ به چنین پرسشی می‌توان گفت که گیت این امکان را در اختیار توسعه‌‌دهندگان قرار می‌دهد تا حتی به صورت آفلاین نیز بتوانند دست به نسخه‌بندی پروژهٔ خود بزنند.

همچنین علیرغم گستردگی گیت، صرفاً‌ با فراگیری تعداد معدودی از کامندها می‌توان شروع به استفاده از این ابزار نمود مضاف بر این که به دلیل استفادهٔ پروژه‌های اپن‌سورس مطرحی همچون Linux Kernel یا فریمورک Ruby on Rails از این ابزار، مسلماً کامیونیتی بزرگی در حال استفاده از گیت می‌باشد و همین مسئله‌ این تضمین را ایجاد می‌کند که در صورت بروز هر گونه مشکلی در حین استفاده از این ابزار،‌ به سادگی بتوان در سایت‌هایی همچون اِستک‌اورفلو پاسخ‌های فراوانی برای پرسش‌های احتمالی خود یافت.

درآمدی بر اصطلاحات رایج در Git

در این بخش از آموزش قصد داریم برخی از پرکاربرترین اصطلاحات مرتبط با سیستم کنترل نسخهٔ گیت را مورد بررسی قرار دهیم که عبارتند از:

– Repo: این اصطلاح برگرفته از واژهٔ Repository به معنی «مخزن» یا «منبع» است. به عبارتی،‌ چنانچه پروژه‌ای داشته‌ باشیم با نامی فرضی همچون sokan-site که با استفاده از ابزار گیت قصد داریم آن را مدیریت کنیم، این پوشه تحت عنوان یک ریپو یا ریپازیتوری شناخته خواهد شد.

– Clone: چنانچه بخواهیم یک ریپازیتوری آنلاین را دریافت نموده و روی سیستم لوکال خود شروع به کار روی آن نماییم، نیاز است تا ابتدا به ساکن کل پروژه را دانلود نماییم که به این کار کلون کردن گفته می‌شود.

– Stage: به منظور درک بهتر این اصطلاح، مثالی از زندگی روزمره می‌زنیم. فرض کنیم که قصد فروش یک خودرو را داریم و از همین روی آن را به کارواش برده و خودروی خود را آمادهٔ فروش می‌‌کنیم. با مد نظر قرار دادن این توضیحات، در سیستم گیت اِستِیج کردن پروژه بدان معنا است که قصد داریم تا تغییراتی که در سورس‌کد پروژهٔ خود اِعمال نموده‌ایم را آمادهسازیم تا در تاریخچهٔ تغییرات گیت ذخیره گردند. به عبارت دیگر، با اِستِیج کردن پروژه به سیستم می‌فهمانیم که قصد داریم کدام فایل‌ها و فولدرها به عنوان یک نسخهٔ جدید از پروژه ذخیره گردند (تصور کنیم در ریپازیتوری sokan-site که پیش از این پیرامونش صحبت کردیم، یکصد فایل جدید اضافه نموده‌ایم اما فقط و فقط قصد داریم تا ده مورد از آن‌‌ها را در تاریخچهٔ تغییرات پروژه ذخیره‌ سازیم که این کار در گیت با کامند خاصی انجام می‌شود و به کل این پروسه «اِستیجینگ» گفته می‌شود.)

– Commit: پیش از این توضیح دادیم که سیستم‌های ورژن کنترلی همچون گیت همچون یک سیستم بک‌آپ عمل می‌کنند به طوری که نسخه‌های مختلفی از فایل‌ها و فولدرهای پروژه‌ را ذخیره خواهند کرد. اساساً برای آن که بتوانیم دست به نسخه‌بندی ریپازیتوری خود بزنیم، نیاز است تا در صورت اِعمال هر گونه تغییری آن را به اصطلاح کامیت نماییم. معنی لغوی این اصطلاح «مرتکب شدن» است اما در فضای سیستم‌های کنترل نسخه می‌توان معادلی همچون «ذخیره کردن تغییرات» برایش در نظر گرفت (در واقع می‌توان به نوعی آن را معادل کلیدهای ترکیبی Ctrl + S تلقی کرد.)

– Push: چنانچه بخواهیم علاوه بر داشتن یک ریپازیتوری به صورت آفلاین آن را در سرویس‌های مطرحی همچون گیت‌هاب یا گیت‌لَب نیز ذخیره‌ سازیم،‌ نیاز به ارسال کلیهٔ‌ فایل‌ها و فولدرهای پروژه روی یک ریپازیتوری آنلاین داریم که به این فرآیند «پوش» گفته می‌شود.

– Pull: در صورتی که بخواهیم تغییراتی که سایر دولوپرها روی یک ریپازیتوری آنلاین همچون گیت‌هاب انجام داده‌اند را دریافت کنیم، نیاز به دریافت تغییرات داریم که به این فرآیند «پول» گفته می‌شود. 

– Pull Request: اگر هم روی یک ریپازیتوری عمومی همچون کِرنِل لینوکس کار می‌کنیم و فرضاً تغییری در آن داده‌ایم و یا باگی را فیکس کرده‌ایم، نیاز است تا توسعه‌دهندهٔ اصلی کِرنِل را از این موضوع مطلع سازیم تا پس از بررسی تغییراتی که توسط ما صورت گرفته از یکسو و همچنین چنانچه مورد تأیید بودند از سوی دیگر، آن‌ها را با شاخهٔ اصلی ادغام نماید که به چنین درخواستی اصطلاحاً «پول ریکوئست» گفته می‌شود.

– Branch: معنی لغوی این اصطلاح «شاخه» است و به نظر می‌رسد که نامی باسمی‌ برای این قابلیت گیت انتخاب شده است. به عبارتی، هر ریپازیتوری یک شاخهٔ اصلی دارد که تحت عنوان Master شناخته می‌شود اما این در حالی است که تک‌تک اعضای تیم می‌توانند شاخه‌هایی با نام‌هایی کاملاً دلخواه از شاخهٔ اصلی جدا کرده و شروع به کار روی آن‌ها کنند و در نهایت دولوپر اصلی پروژه می‌تواند شاخه‌های فرعی را، در صورت تأیید شدن، با شاخهٔ اصلی ادغام نماید.

– Merge: همان‌طور که پیش از این توضیح داده شد، چنانچه در یک ریپازیتوی علاوه بر شاخهٔ اصلی شروع به ساخت یک سری شاخهٔ‌ فرعی نماییم،‌ در نهایت نیاز است تا کلیهٔ شاخه‌‌های فرعی با شاخهٔ به اصطلاح مَستر ادغام شوند که به این پروسه «مِرج» گفته می‌شود.

مطالب مرتبط

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *