ابزارهای یک مهندس نرم افزار قسمت اول مدیریت نسخه های مختلف فایلهای پروژه آشنایی با GIT

by مجتبی بنائی - شنبه 01 تیر 1392 - گروه : تخصصی - مشاهده : 9
برچسب‌ها: #تخصصی‌نرم‌افزار #ابزار #مهندسی‌نرم‌افزار #گیت

s: ابزار | مهندسی نرم افزار | گیت با تجربه شانزده ساله در دنیای برنامه نویسی و حدود هفت ساله در مدیریت پروژه های مختلف نرم افزاری و شکست ها و موفقیت های کوچک و بزرگ، تصمیم دارم تجربیاتی که دراین مدت کسب کرده ام را بخصوص در حوزه مدیریت پروژه های مختلف نرم افزاری در اختیار علاقه مندان این حوزه قرار دهم .تجربیاتی که اگر قبلا در اختیار خودم قرار می گرفت، کارهای حرفه ای تری با زمان کمتر و بازدهی بیشتر انجام میدادم. بسیاری از این تجربیات هم در دو سال گذشته و بعد از درگیر شدن در یک کار بین المللی و یک کار ملی حاصل شده است و امیدوارم بتواند تا حدودی برای علاقه مندان این حوزه مفید باشد و برای مهندسی نرم افزار کشور که واقعا بی متولی و بدون استاندارد است ، یک قدم بسیار کوچک رو به جلو محسوب شود . بیشتر روی صحبت بنده با برنامه نویسانی است که قصد تاسیس و مدیریت یک شرکت برنامه نویسی و نرم افزاری را دارند که بیشتر از خود برنامه نویسی باید مهارتهای مهندسی نرم افزار را داشته باشند . یکی از اولین ابزارهایی که یک مهندس نرم افزار باید برای تیم خود نصب و پیکر بندی کند، یک سیستم مدیریت فایل است که به صورت خودکار از فایلهای پروژه ، پشتیبان تهیه کند، قسمتهای مختلف پروژه را بین افراد مختلف تیم به اشتراک بگذارد و در صورت بروز مشکل ، بتواند منبع یا شخص تولید کننده آن به همراه تاریخچه تغییرات فایلهای پروژه را به راحتی نشان دهد . به اینگونه سیستم ها version control می گویند. یک رهیافت قدیمی برای مدیریت فایلها ، استفاده از سیستم های سرویس دهنده / سرویس گیرنده یا کلاینت / سرور است که معروفترین ابزار در این حوزه subversion ‌ است که در آن کدها در یک سرور مرکزی نگهداری میشود و هر کس تغییرات خود را در فایلها باید در این سرور ذخیره کند . به دلیل وجود یک سیستم مرکزی برای مدیریت کدها، مشکلات کار با فایلها در زمانی که چندین نفر یک یا چند فایل مشترک را تغییر می دهند به حداقل می رسد اما ماهیت یک تیم نرم افزاری بیشتر از اینکه به شکل سرور و کلاینت باشد به صورت مجموعه ای سیستم ها و افراد هم تراز است که هر شخص راسا تصمیم می گیرد که چه الگوریتمی و چه تغییراتی را باید در کد قرار دهد بدون اینکه شخص یا سیستمی نقش مرکزی را ایفا کند . این ساختار مدیریت توزیع شده پروژه باعث شد تمایل به استفاده از سیستم های توزیع شده مدیریت فایلهای پروژه روز بروز افزایش پیدا کند به طوری که امروزه GIT که یک سیستم مدیریت فایل توزیع شده است، حرف اول را سیستم های کنترل ورژن می زند . یک سیستم بسیار راحت و حرفه ای برای مدیریت تمام فایلهای یک پروژه نرم افزاری . بخصوص امروزه که تقریبا تمام ابزارهای برنامه نویسی و محیطهای توسعه نرم افزار، به صورت پیش فرض گیت را پشتیبانی می کنند . توصیه می کنم قبل از شروع کار با گیت و نصب یکی از نرم افزارهای مدیریت گیت ، آموزش ساده و کاربری سایت Atlassian ‌ را هم خودتان مطالعه کنید و هم برای تک تک افراد تیمتان خواندن آنرا اجباری کنید و حتی برای ورود به شرکت، آزمونی برگزار کنید که یکی از موارد آن حتما همین آموزش باشد . در گیت هر کسی پروژه را به صورت کامل روی سیستم لوکال خود دارد و هر تغییری که لازم دید درهر جای پروژه اعمال میکند و نهایتا آنها را در یک مخزن اشتراکی تحت وب که معمولا سایت گیت هاب یا بیت باکت است، قرار می دهد و برنامه نویسان در بازه های زمانی کوتاه ، فایلهای خود را با مخزن اشتراکی همگام سازی می کنند و اگر فایل موجود در مخزن اشتراکی با فایل لوکال آنها متفاوت بود، خودشان تصمیم می گیرند که کدام تغییرات را نگه دارند و کدام ها را حذف کنند . امکان برگشت فایلها به هر جایی در تاریخچه گیت به راحتی امکان پذیر است و برای افزودن افزودن هر قابلیت جدید به پروژه حتما از مکانیزم ایجاد انشعاب یا برنچ استفاده کنید . ابعد از آشنایی و تمرین با گیت، مرحله بعد ، انتخاب روش انجام پروژه با گیت است : اینکه نسخه های مختلف نرم افزار ، باگ ها ، قابلیت های جدید و نحوه تست و نهایی شدن کارها به چه صورت باشد . روندی که به آن جریان کار می گوییم . از بین جریان های مختلفی که می توانید در شرکت خودتان در پیش بگیرید و بیشتر یک قرارداد داخلی برای مدیریت فایلها است ، توصیه بنده استفاده از GitFlow ‌ است که همه جنبه های مختلف و مورد نیاز یک پروژه را در بر می گیرد و استفاده از آن را در پروژه های تجاری توصیه می کنم. یک آموزش خوب فارسی برای گیت را می توانید در این آدرس پیدا کنید . برای بچه های درس مهندسی نرم افزار پیشرفته ، گیت را به طور کامل آموزش داده ام و تمرینی هم طراحی کرده ام که با جنبه های مختلف آن بیش از پیش آشنا شوند . این تمرین نسبتاً طولانی که می تواند مورد استفاده سایرین هم قرارگیرد را در ادامه مطلب می آورم : کار عملی ------------ قبل از شروع کار : ۱.ابتدا مطمئن شوید که در سایت GitHub اکانت دارید . ۲. مطمئن شوید که گیت روی سیستم شما نصب و آماده استفاده است . کافیست در خط فرمان ویندوز تایپ کنید : git --version و اگر گیت نصب شده باشید باید نسخه گیت خود را با این دستور ببینید . ۳. دستور echo در ویندوز متنی را روی خروجی چاپ می کند مثلا echo "Hello World !" عبارت روبروی آنرا چاپ می کند . دستور > باعث می شود که خروجی دستور قبلی را بتوانیم در یک فایل بریزیم. بنابراین دستور زیر :‌ echo "Hello World !" > test.txt و اگر بخواهیم محتویات قبلی فایل پاک نشود می توانیم از > استفاده کنیم . بنابراین دستور زیر : dir >> test.txt باعث می شود خروجی دستور dir که لیست فایلها و پوشه ها را نمایش می دهد به فایل test.txt اضافه شود . برای دیدن سریع محتوای یک فایل از دستور cat ‌ می توانید استفاده کنید : Cat test.txt ۴. برای کارکرد درست گیت باید نام کاربری و ایمیل خود را هم به گیت اعلام کنید. با دستور زیر این کار را انجام دهید : git config --global user.name git config --global user.email که به جای ‌ و ، نام و ایمیل خود را وارد کنید . با این مقدمات ، مراحل زیر را برای آشنایی با گیت و انجام تمرین درس طی کنید : درون خط فرمان ویندوز، وارد درایو d شده و پوشه ای به نام Bozorgmehr ‌ ایجاد کرده و وارد پوشه شوید . d: md Bozorgmehr Cd Bozorgmehr فایلی به نام test ‌ به صورت زیر ایجاد کنید : echo "Hello World !" > test.txt گیت را در این پوشه راه اندازی کرده و وضعیت گیت را بلافاصله چک کنید .بعد این فایل را به گیت اضافه کنید. وضعیت گیت را بررسی کرده ، تغییرات را کامیت نموده و مجددا وضعیت را بررسی کنید . git init git status git add test.txt git status git commit -m "First Commit!" git status چه تفاوتی بین این سه وضعیت گیت مشاهده کردید ؟ A یک خط دیگر به فایل فوق اضافه کنید و یک فایل جدید هم تولید کنید : echo "Second Line " >> test.txt echo "Second file" > sec.txt فایل اول را به گیت اضافه کرده و کامیت کنید. با دستور git log تاریخچه های از کامیت ها را مشاهده کنید . به ازای هر کامیت چند خط خروجی تولید می شود ؟ چه اطلاعاتی نمایش داده می شود ؟ B با بررسی وضعیت گیت متوجه میشویم فایل جدید را یادمان رفته است کامیت کنیم . آنرا به گیت اضافه کرده و با دستور کامیت اصلاحی ، کامیت قبل را اصلاح می کنیم :‌ git commit --amend مجددا git log ‌ را بررسی کرده، چه تغییری مشاهده می کنید ؟ C یک فایل دیگر به نام test2.txt ‌ایجاد کرده ، کامیت کنید . یک خط به فایل test2 ‌اضافه کرده آنرا کامیت کنید . echo "Test2 Last Line !" >>test2.txt git add test2.txt git commit -m "append one line to test2" یک فایل دیگر به نام test3.txt ایجاد کرده و کامیت کنید . حال می خواهیم تاریخچه لاگ را بررسی کنیم و ببینیم در هر کامیت چه فایلهایی تغییر کرده است . چه دستوری باید اجرا کنیم ؟ D می خواهیم فایل test2 ‌ را از سه کامیت قبل (قبل از مرحله ۱۲) را بازیابی کنیم . چگونه این کار را انجام میدهیم ؟ (که فقط یک فایل را از یک کامیت برگردانیم ؟ ) E به هر کدام از فایلهای test1,test2,test3 یک خط اضافه کنید. حال تغییرات فایل test2 ‌ را می خواهیم بر گردانیم . چه دستوری را اعمال می کنید؟ این کار را انجام دهید. E اگر همه تغییرات را بخواهیم برگردانیم ، چه دستوری را باید اجرا کنیم ؟ انجام دهید F می خواهیم تمام تغییرات انجام شده در دو کامیت قبل ، به حالت قبل برگردد . با چه دستوری کل کامیت را بر می گردانید ؟ انجام دهید. G می خواهیم تمام کارهایی که تا الان انجام داده ایم را در قالب یک کامیت در گیت ذخیره کنیم . یعنی همه کامیت ها حذف شود و در یک کامیت جدید ، تمام تغییرات در گیت ذخیره شود. دستور متناظر چه خواهد بود ؟ دستور مورد نظر را اعمال کنید. H یک برنچ جدید به نام Exam ایجاد کنید . وارد برنچ شوید و فایل test4.txt را ایجاد کرده ، کامیت کنید . فایل test2.txt ‌ را تغییر دهید (مثلا یک خط به آخر آن اضافه کنید) و آنرا کامیت کنید . می خواهیم لیست برنچ ها را ببینیم . چه دستوری را میزنید ؟ I برنچ مستر را با exam مرج کنید . حال به برنچ exam ‌ برگردید و آنرا با مستر rebase کنید . بعد از اینکار ، به مستر برگشته آنرا با برنچ جید مرج کنید . به برنچ exam ‌ برگشته و یک خط به فایل test3.txt ‌ و یک خط به فایل test2.txt ‌ اضافه کنید . به برنچ مستر برگردید و یک خط به test3.txt اضافه کیند . حال آنرا با برنچ exam ‌ مرج کنید . چه پیامی مشاهده می کنید ؟ برای انجام مرج باید چه کاری انجام دهید ؟ بعد از مرج اگر تاریخچه لاگ ها را نگاه کنید در آخرین کامیت چه پیامی را مشاهده میکنید ؟ J برنچ exam ‌ را پاک کنید . برنچی جدید با نام aban ‌ ایجاد کنید و در آن فایل test2 ‌ را تغییر داده و کامیت کنید . فایل test6.txt ‌ را ایجاد کرده و کامیت کنید (در برنچ آبان) . حال به مستر برگردید و فایل test2 ‌ را تغییردهید و کامیت کنید . حال به برنج آبان برگردید و آنرا با مستر rebase ‌ کنید . چه خطایی مشاهده می کنید ؟ چگونه آنرا رفع میکنید ؟ K بعد از ریبیس کردن مستر با برنچ آبان،‌برنچ آبان را پاک کنید . حال می خواهیم پروژه را به گیت هاب و اکانتی که ایجاد کرده اید منقل کنیم . چگونه این کار را انجام می دهید ؟ L راهنما : زمانی که یک ریپوزیتوری خالی در گیت هاب ایجاد می کنید به شما توضیح می دهد که اگر قصد دارید یک پروژه موجود را به این ریپوزیتوری اضافه کیند چه دستورهایی را باید بزنید . پروژه را بعد از اینکه به گیت هاب منتقل کردید ، در یک پوشه جدید کلون کنید . در پوشه قبلی ، فایلی را به پروژه اضافه کنید،‌آنرا کامیت و با دستور پوش به سرور منتقل کیند . در پوشه جدید ، با دستور pull ‌ تغییرات جدید پروژه را دریافت کنید . چه پیامی را مشاهده میکنید ؟‌ M حال به پوشه اول برگردید و یک تغییر در یک فایل ایجاد کنید و مجددا، آنرا کامیت کنید و به سرور منتقل کنید . حال به پوشه جدید آمده ، یک خط به فایل test1.txt ‌ اضافه کنید . حال دستور pull ‌ را اجرا کنید . چه چیزی مشاهده می کنید ؟ برای ذخیره موقت تغییرات و انجام pull از دستور git stash ‌ استفاده کنید. با اینکار تغییرات شما موقتا ذخیره می شود و اگر وضعیت گیت را بررسی کنید ، تغییری برای کامیت مشاهده نخواهید کرد. حال git pull ‌ را اجرا کنید و برای برگشتن تغییرات قبلی از دستور git stash apply استفاده کنید . با این کار ، چه پیامی مشاهده می کنید؟‌ N موارد اصلی گیت را فرا گرفته اید . به عنوان آخرین تمرین، یک ریپوزیتوری در گیت به اسم Projects ایجاد کنید و پوشه ای را روی لپ تاپ خودتان که پروژه های دانشگاهی تان را روی آن پوشه ذخیره می کنید، به این ریپوزیتوری منتقل کنید . مراحل انجام کار را بنوییسید . O

Comments