Software Enginering Lab 01 - Mohammad Hossein Gheisarieh - Mohammad Heidary
ابتدا مخزن را در گیت هاب ساخته و در لوکال پول کردیم و gitignore را اضافه کردیم. در gitignore فایل ویدیوی آموزشی گیت را اضافه کردیم که در مخزن مان این فایل را پوش نکنیم. همچنین برای مرج شدن کامیت در برنچ اصلی نیازمند pull request هستیم. سپس در ادامه حلقه اصلی برنامه ماشین حساب و پشتیبانی 4 عمل اصلی به ماشین حساب در برنچ dev اضافه شد و با برنچ اصلی مرج شد.
ولی این برنامه یک باگ دارد و تنها یک عملیات میتواند انجام دهد. این باگ را در برنچ hotfix رفع کردیم. در برنچ اصلی یک عبارت الکی قرار داده تا کانفلیک بخوریم. این کانفلیکت را حل کرده و ادامه دادیم.
برای اضافه کردن خاصیت نشان دادن رشته های راهنمای ماشین حساب یک برنچ با نام feature_printing_strings ساختیم و در این برنچ این خاصیت را اضافه کردیم و با برنچ اصلی مرج کردیم.
سپس در برنچ hotfix_get_invalid_number باگ ایجاد خطا با دریافت ورودی غیر مجاز را رفع کرده و پیغام خطا را به برنامه اضافه کردیم.
جواب سوالات:
- پوشهی .git چیست؟ چه اطلاعاتی در آن ذخیره میشود؟ با چه دستوری ساخته میشود؟
پوشهی .git، پوشهای است که در داخل ریپازیتوری قرار دارد و تمام اطلاعات مربوط به تاریخچهی تغییرات، برنچ ها، تنظیمات و سایر موارد را در خود ذخیره میکند. این پوشه با دستور git init ساخته میشود. در داخل پوشه .git، فایلهای مختلفی وجود دارند. این فایل ها با هم اطلاعات مخزن را نگهداری میکنند. این فایلها binary هستند و این فولدر مخفی می باشد.
- منظور از atomic بودن در atomic commit و atomic pull-request چیست؟
این عبارت یعنی غیرقابل تجزیه. به طور دقیق تر یعنی عملیات انجام شده در یک commit یا pull-request، به صورت یکپارچه انجام میشود و نمیتوان آن را به قسمتهای کوچکتر تقسیم کرد. در واقع یا به کلی انجام میشود یا در صورت بروز خطا کامل برگشت داده خواهد شد.
- تفاوت دستورهای fetch و pull و merge را بیان کنید.
دستورات fetch , pull , merge برای انتقال تغییرات را از برنچ های دیگر به برنچ فعلی استفاده میشوند. اما به طور دقیق تر اگر بخواهیم شرح دهیم:
دستور fetch برای دریافت تغییرات از یک برنچ دیگر به برنچ فعلی استفاده میشود. با استفاده از fetch، تغییرات روی ریموت بر روی لوکال آپدیت میشود، بدون آنکه تغییرات به برنچ فعلی منتقل شود.
اما دستور pull برای دريافت تغييرات و ادغام آن ها با برنچ فعلی استفاده ميشود. با استفادة از pull، تغييرات روي ریموت بر روی لوکال آپدیت میشود و با لوکال ادغام میگردد.
نهایتا دستور merge برای ادغام دو برنچ با هم استفاده مىشود. با این دستور، تغىيرات دو شاخه، با يكديگر ترکیب میشوند و تبدیل به یک شاخه میشوند.
- تفاوت چهار دستور reset و revert و rebase و restore را بیان کنید.
با دستور reset میتوانیم HEAD را به یک commit خاص برگردانیم. این دستور برای حذف تغییراتی استفاده می شود که در کامیت های قبلی انجام شده است.
با دستور revert میتوانیم تا یک commit خاص را بازگردانده و تغییرات آن را لغو کنیم. با استفاده از این دستور، کامیت های جدیدتر نیز حفظ می شوند.
با دستور rebase میتوانیم برنچ فعلیمان را بر روی برنچ دیگری اعمال کنیم. با استفاده از این دستور، کامیت های جدیدتر در branch فعلی قرار می گیرند کامیت های قدیمی تر در برنچ دوم حفظ می شود.
با دستور restore میتوانیم چندین فایل را بازگردانی کرده و به حالت قبل برگردانیم. با استفاده از این دستور، تغییرات در فایل های مورد نظر به عقب برمیگردند و نسخه های قبلی فایل های مد نظر را می یابیم.
- منظور از stage چیست؟ دستور stash چه کاری را انجام میدهد؟
منظور از stage مرحله ای از commit است که در آن فایلهای تغییر یافته و آماده کامیت مشخص میشوند. در واقع فرایند کامیت این گونه است که با استفاده از دستور git add فایلهای تغییر یافته را به stage اضافه میکنیم و سپس با دستور git commit تغییرات را در مخزن ذخیره میکنیم.
دستور stash در گیت برای ذخیره تغییرات فعلی اعمال شده در فولدر پروژه و stage و سپس پاک کردن آنها استفاده میشود. با استفاده از این دستور، تغییرات فعلی در stash ذخیره شده تغییرات فولدر پروژه و stage پاک میشوند. سپس با استفاده از دستور git stash apply، تغییرات در stash بازگردانده شده و دوباره میتوان از آن ها استفاده کرد.
- مفهوم snapshot به چه معناست؟
اسنپ شات در گیت به معنای یک نسخه از کد مخزن است. این نسخه در زمان مشخصی، توسط گیت ذخیره شده است و شامل تمام فایلها، پوشهها، تغییرات و تنظیمات مربوط به پروژه است. با ایجاد snapshot، میتوان به راحتی بین نسخههای مختلف کد منبع جا به جا شد و در صورت نیاز به یک نسخه قبلی بازگشت.