آموزش کار با گیت فلو و همه چیز در رابطه با آن
شاید با گیت هاب آشنا باشید. گیت هاب یک پلتفرم آنلاین ساخته شده توسط شرکت آمریکایی Gitlab برای مدیریت ورژن و کد پروژههای برنامهنویسی و توسعه نرمافزاری است. این پلتفرم قابلیتهای ویژه زیادی دارد که با توجه اندازه و گستره پروژه خود میتوانید هر کدام را به شکلی مورد استفاده قرار دهید. اما «Git Flow چیست؟» یکی از سؤالاتی است که برای بسیاری از کاربران گیت هاب پیش میآید. آموزش گیت فلو میتواند شما را وارد دنیای حرفهای برنامهنویسی و IT کند. همچنین با پیدا کردن پاسخ مناسب برای این سؤال مسیر یادگیری شما در این زمینه به شدت هموار و سریع خواهد بود.
زمانی که پروژه به حدی گسترش پیدا میکند، یا به اندازهای بزرگ است که تیمهای مختلف روی آن کار میکنند، نیاز به یک راهکار مطمئن داریم که فرایند کار به صورت دقیق و حرفهایتر انجام شود. مدیریت ورژن و کدهای نوشته شده توسط اعضای مختلف تیم باید به نوعی مدیریت شوند. یکی از روشهای مدیریت حرفهای این فرایند گیت فلو نام دارد.
در این آموزش گیت فلو سعی میکنیم تمام امکانات و راهکارهای این نوع گردش کار را به صورت مقدماتی اما کاربردی با شما در میان بگذاریم. در صورتی که قصد دارید از پلتفرم قدرتمند گیت و گیت هاب بهترین بهره برداری ممکن را داشته باشید ادامه این مقاله را از دست ندهید.
Git Flow چیست؟
گردش کار Gitflow که با نام Git workflow نیز شناخته میشود، برای پروژههایی مناسب خواهد بود که حداقل یکی از دو ویژگی زیر را دارند.
- چرخه انتشار برنامهریزی شده دارند.
- دارای روند تحویل مداوم و بلند مدت هستند.
هر شاخه از Workflow در یک پروژه بزرگ نرمافزاری در گیت هاب را با نام Branch میشناسیم. هر شاخه در گردش کار Branches به عهده یک تیم، کارشناس یا توسعه دهنده است. گیت فلو بدون این که مفهوم جدیدی به برنج اضافه کند، چگونگی تعامل شاخهها با یکدیگر را به صورت بهینهتری مدیریت و کنترل میکند. در گردش کار «Workflow» با متد گیت فلو شاخههای زیر را داریم.
- Master: تاریخچه ورژنهای رسمی پروژه نهایی و تأیید شده را ثبت و نگهداری میکند. وقتی یک ورژن تأیید میشود به منزل این است که میتوانیم تحویل مشتری دهیم. پس باید ورژن آن مشخص شود تا در صورت نیاز به تغییرات و توسعه هر بخش شاخههایی که در ادامه معرفی میکنیم مجدد فعال و ویرایش شوند. این شاخه تنها برای کنترل ورژن استفاده خواهد شد. نسخهای که منتشر میکنیم طبق این ورژن در شاخه Release قرار دارد.
- Feature: ویژگیهای جدیدی که در طول توسعه پروژه به آن اضافه میشوند را Feature مینامیم. در یک گردش کار میتوانیم چند شاخه Feature داشته باشیم که هر کدام توسط افراد خاصی در حال توسعه هستند. هر ویژگی در این نوع گردش کار ماهیتی مستقل دارد. یعنی میتوانیم هر کدام را حذف یا ویرایش کنیم.
- Develop: بستری برای ادغام یا merge ویژگیها است. در واقع Featureها در این بخش تجمیع شده و ساختار کلی پروژه را تشکیل میدهند.
- Release: نسخه نهایی قابل عرضه را شامل میشود. این نسخه پس از تأیید به عنوان یک ورژن به در بخش Master ثبت خواهد شد. در صورت نیاز به توسعه بیشتر و افزودن ویژگیهای جدید یا حذف هر بخش ناخواسته به بخش Develop برمیگردیم. سپس دوباره ورژن جدید با Featureهای جدید در Release قرار گرفته و ورژن آن مجدد توسط Master کنترل و ثبت میشود.
اگر به تصویر بالا دقت کنید متوجه خواهید شده که در اصل شاخههای Develop و Master سیر تکامل اصلی پروژه بوده و در حقیقت شاخههای اصلی به شمار میرود. شاخههای دیگر در خدمت این دو بخش خواهند بود.
پیشنهاد مطالعه: آموزش گیت در اندروید: تسلط بر گیت برای توسعه دهندگان و کاربران اندروید
آموزش ایجاد شاخهها در گردش کار گیت فلو
جالب است بدانید بخشهایی که معرفی کردیم هر کدام یک شاخه یا Branch ایجاد شده در پلتفرم گیت هستند، که برای ساخت آنها میتوانیم از دستور زیر استفاده کنیم.
git branch master
سپس نیاز به پوش کردن این شاخه در سرور گیت داریم که با کد زیر انجام میشود. پوش کردن به معنی تأیید نهایی هر تغییر جهت ذخیره در سرور و ثبت ورژن برای آن است.
git push -u origin master
روش کلی کار به این صورت است که ابتدا یک ریپازیتوری در گیت ایجاد کرده و سپس شاخههای معرفی شده را با همان نامهای مطرح شده در بخش قبلی یا هر نام دیگری تعریف میکنیم. اسم شاخهها اهمیت چندانی ندارد. سعی کنید برای هر شاخه نامی انتخاب کنید که برای همه اعضای تیم قابل فهم باشد. هدف اصلی مدیریت بهتر است. پس بهتر است ساختار را فرا بگیرید تا این که بخواهید اسامی را حفظ کنید.
در ابتدا تنها باید شاخههای اصلی ایجاد شوند. شاخههای اصلی master و develop نام خواهند گرفت. البته شاخه Release نیز به نوعی از شاخههای اصلی به شمار میرود؛ زیرا نسخههای قابل انتشار را در بر میگیرد. اما ایجاد آن ضرورتی ندارد. این شاخه برای مدیریت بهتر توسط برخی سازمانهای بزرگ که پروژههای پیچیده دارند در ریپازیتوری ساخته میشود.
پس از ایجاد این بخشها به کمک دستورات معرفی شده، باقی شاخهها را بر اساس آنها میسازیم. بهعنوان مثال هر ویژگی یا Feature بر اساس نیاز لحظهای پروژه ایجاد و پس از اتمام توسعه با بخش develop ادغام میشود. برای ساخت شاخههای Feature در گیت دو روش داریم. در روش اول بدون نیاز به افزونه گیت فلو با دستورات زیر عمل میکنیم.
Git checkout develop
دستور بالا مربوط به فراخوانی یا پیمایش در برنچ از پیش ساخته شده است. همانطور که اشاره کردیم ویژگیها یا همان Featureها، ابتدا در شاخه develop جمع میشوند. پس باید به این شاخه رفته و داخل آن با دستور زیر یک شاخه Feature جدید بسازیم.
git checkout -b feature_branch
در صورتی که قبلاً افزونه gitflow را نصب کرده باشید و قصد کار با آن را دارید، میتوانید از دستور زیر برای ایجاد یک شاخه Feature استفاده کنید.
git flow feature start feature_branch
به جای feature_branch هر نام دیگری را میتوانید بنویسید. لازم به ذکر است گیت فلو در ورژنهای چند سال اخیر نرمافزار گیت به صورت پیش فرض همراه آن نصب میشود. برای این که ورژن آن را بررسی کنید میتوانید از دستور زیر کمک بگیرید.
git flow version
از این جهت نیاز به نصب گیت فلو ندارید. بهروز نگه داشتن گیت کافی خواهد بود. اما در صورتی که گیت فلو در سیستم شما نصب نشده یا به هر دلیل دچار مشکل باشد، مراحل زیر را برای نصب آن انجام دهید.
در ادامه آموزش گیت فلو برای نصب این افزونه فایلهای زیر را از سایت SourceForge دانلود کنید.
- util-linux-ng-2.14.1-bin.zip
- util-linux-ng-2.14.1-dep.zip
این فایلها را از حالت فشرده خارج کرده و سه فایل زیر را که پس از استخراج دریافت میشوند، در آدرس C:\Program Files\Git\bin کپی کنید.
- libintl3.dll
- libiconv2.dll
- getopt.exe
حال باید در خط فرمان گیت دستور زیر شود.
git clone –recursive git://github.com/nvie/gitflow.git
در مرحله بعدی خط فرمان ویندوز را در حالت Administrator اجرا و دستور زیر را وارد میکنیم.
msysgit-install.cmd “C:\Program Files\Git”
در نهایت برای این که مطمئن شویم ورژن مورد نظر به درستی نصب شده دستور زیر را در خط فرمان ویندوز وارد خواهیم کرد.
git flow version
در صورتی که نصب افزونه موفق بوده باشد، ورژن آن به صورت زیر نمایش داده میشود.
2.14.1 (AVH Gitflow Edition)
آموزش گیت فلو را با یادگیری روش نصب این افزونه در لینوکس ابونتو ادامه میدهیم. برای این کار کافی است کد زیر را در خط فرمان این سیستمعامل وارد کنید.
apt install git-flow
پس از به اتمام رسیدن عملیات توسعه یک شاخه Feature، باید آن را با شاخه develop ادغام «Merge» کنیم. برای این کار نیز دو روش داریم که یکی معمول و و دیگری بر اساس افزونه گیت فلو انجام میشود. روش معمول به شکل زیر است.
git checkout develop
git merge feature_branch
اگر از افزونه gitflow استفاده میکنید نیز تنها باید دستور زیر را وارد کنید.
git flow feature finish feature_branch
این کار را به اصطلاح پایان دادن Feature نیز مینامیم. در این فرایند همانطور که پیشتر اشاره کردیم، هر Feature یک برنچ مستقل است که پس از توسعه و انجام تستهای ضروری به بخش develop اضافه میشود. پس از تأیید نهایی نیز ورژن پروژه در شاخه master کنترل و ثبت میشود. نسخه نهایی را هم در شاخه Release خواهیم داشت که آماده انتشار است.
پیشنهاد مطالعه: مراحل و آموزش ساخت سایت با گیت هاب
شاخه Release «انتشار»
در این بخش سعی میکنیم عملکرد گردش کار گیت فلو را با توجه به دادههایی که تا اینجا دریافت کردید جمعبندی کنیم. طبق دانشی که کسب شد شاخه Release همان نسخهای است که به عنوان ورژن جدید منتشر خواهیم کرد. این شاخه در حقیقت یک بخش پشتیبانگیری برای شاخه develop محسوب میشود.
از آنجایی که شاخه develop دائم در حال تغییر و تحول است، نیاز به شاخهای مجزا برای مدیریت بهتر نسخههای نهایی داریم. در نتیجه پروژه به صورت اصولی مدیریت شده و درصد خطا کاهش پیدا میکند.
آموزش گیت فلو برای کلاینتها
پلتفرمهای گیت و گیتهاب حالت سرور و کلاینت دارند. به این معنی که مدیر یک پروژه ریپازیتوری و شاخهها را ایجاد کرده و سپس به اعضای تیم دسترسیهای لازم را میدهد تا بتوانند در روند توسعه نقش خود را ایفا کنند. میدانیم که نرمافزار گیت که با نام gitbash نیز شناخته میشود در سیستم مدیر نصب شده و کارهای اصلی سرور را انجام خواهد داد.
کلاینتها برای این که بتوانند به سرور متصل شده و طبق دسترسیهایی که دارند کارها را پیش ببرند باید نرمافزار مربوطه را در سیستم خود نصب داشته باشند. نرمافزاری که این امکان برای آنها فراهم میسازد Smartgit نامیده میشود. برای دانلود Smartgit نام آن یا عبارت «نرمافزار کلاینت گیت» را در گوگل جستجو و از یکی از لینکهای معتبر اقدام نمایید. برای اطمینان از اصالت و امنیت این پلتفرم میتوانید آن را از لینک زیر نیز دانلود کنید.
- https://www.syntevo.com/smartgit/
در واقع هر ریپازیتوری و شاخهای که مدیر پروژه به شما اجازه فعالیت در آن را داده است در این پلتفرم در دسترس شما خواهد بود. با این نرمافزار بیشتر به Featureهای مربوط به خود دسترسی پیدا میکنید. مدیریت و پیاده سازی شیوه گردش کار کیت فلو به عهده مدیر پروژه است.
در این مطلب چه چیزی آموختیم
برنامهنویسی در سالهای گذشته و قبل از به وجود آمدن پلتفرمی به نام گیت و گیت هاب توسط شرکت آمریکایی Gitlab چالشها و دشواریهایی داشت که باعث میشدند کمتر کسی بتواند در این حوزه فعالیت کند. یکی از چالشهای بزرگ برای توسعه دهندگان نرمافزار کنترل و مدیریت ورژنهای پروژه بود.
وقتی کارفرما با یک ورژن مشکل داشت، برنامهنویس مجبور بود کل کدهای نوشته شده یا پاک شده را بازنویسی کند. یا این که باید یک نسخه کامل از ورژن قبلی در جایی ذخیره میکرد تا در صورت بروز مشکل مجبور به اضافه کاری نباشد. از زمانی که گیتهاب و گیت ساخته شدند مدیریت ورژن و ذخیره سازی کدها بسیار آسان شده است.
برای فعالیت در گیت میتوانیم از گردش کارها و تکنیکهای مختلفی استفاده کنیم. یکی از گردش کارهای بهینه که بسیاری از فعالین این حوزه به آن علاقه دارند، گیت فلو است. در آموزش گیت فلو سعی کردیم یک آشنایی مقدماتی برای کاربران مکتب خونه ایجاد کنیم. برای دریافت آموزشهای بیشتر و حرفهای میتوانید از آکادمی آموزش مجازی مکتب خونه و دورههای آموزش git آن کمک بگیرید.