Skip to content

bardia-mhd/SE_lab_1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

تمرین اول


گزارش

Git برای پروژه مدیریت لیست کارها (To-Do List Manager)

دستور Git Status

دستور git status برای مشاهده وضعیت فعلی پروژه در مخزن Git استفاده می‌شود. این دستور نشان می‌دهد کدام فایل‌ها اصلاح شده، اضافه شده یا حذف شده‌اند و آیا این تغییرات برای commit شدن آماده هستند یا خیر.

Screenshot 2023-07-15 at 10 43 04 AM

دستور Git Commit

دستور git commit برای ذخیره تغییرات در مخزن استفاده می‌شود. با استفاده از گزینه -m، کاربر می‌تواند پیام commit را شامل توضیحی درباره تغییراتی که اعمال شده‌اند، درج کند.

دستور Git Pull

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

Screenshot 2023-07-15 at 10 43 49 AM

دستور Git Push

دستور git push برای آپلود تغییرات مخزن محلی به یک مخزن از راه دور استفاده می‌شود. این دستور معمولاً برای به اشتراک گذاری تغییراتی که توسط کاربر با سایر اعضای تیم ایجاد شده‌اند، استفاده می‌شود. برای push باید origin آن شاخه نیز در نظر گرفته شود

دستور Git Merge

دستور git merge برای ترکیب تغییرات از دو یا چند شاخه به یک شاخه استفاده می‌شود. این دستور برای ادغام تغییرات اعضای دیگر تیم با شاخه محلی کاربر استفاده می‌شود.

دستور Git Checkout

دستور git checkout برای تغییر شاخه‌ها یا commit های مختلف در مخزن استفاده می‌شود. این دستور معمولاً برای تغییر به یک شاخه مختلف برای کار بر روی یک قابلیت جدید یا رفع باگ استفاده می‌شود.

Screenshot 2023-07-15 at 10 45 01 AM

دستور Git Branch

دستور git branch برای مدیریت شاخه‌ها در مخزن استفاده می‌شود. این دستور برای ایجاد، تغییر نام یا حذف شاخه‌ها در مخزن استفاده می‌شود.


به طور خلاصه روال انجام به صورت زیر است:

  1. با استفاده از دستور git clone، مخزن را از مخزن اصلی به دستگاه محلی کلون می کنیم.
  2. با استفاده از دستور git checkout -b یک شاخه جدید برای قابلیت جدید یا رفع باگ ایجاد مکنیم.
  3. تغییرات را در فایل‌های پروژه اعمال کرده و با استفاده از دستور git add تغییرات را برای انجام commit آماده می کنیم.
  4. با استفاده از دستور git commit -m تغییرات را commit می کنیم.
  5. با استفاده از دستور git pull تغییرات از مخزن اصلی را برای به‌روزرسانی مخزن محلی دریافت می کنیم.
  6. در صورت بروز هرگونه تداخل در هنگام pull، تداخل را برطرف می کنیم.
  7. با استفاده از دستور git push تغییرات را به مخزن اصلی ارسال می کنیم.
  8. یک درخواست pull برای ادغام تغییرات با شاخه اصلی ایجاد می کنیم.
  9. درخواست pull را بررسی و تأیید می کنیم.
  10. با استفاده از دستور git merge تغییرات را با شاخه اصلی ادغام می کنیم.

رفع (Merge Conflicts)

هنگامی که دو یا چند شاخه (branch) در یک پروژهدر Git با یکدیگر ادغام (merge) می‌شوند و تغییرات متفاوتی در هر شاخه ایجاد شده باشد، ممکن است تداخل‌های ادغام (merge conflicts) رخ دهد. این به معنی این است که Git نمی‌تواند به طور خودکار تغییرات را با هم دوام بخشد و برای ادغام نیاز به دستکاری دستی دارد.

برای جلوگیری از merge conflicts، بهتر است به‌صورت منظم تغییرات خود را commit کرده و برای ادغام تغییرات از شاخه‌های جداگانه و با نام معنادار استفاده کنید و شاخه اصلی را protected کنیم. همچنین برای رفع merge conflicts ها از محیط گرافیکی GitHub که به‌صورت گرافیکی و با استفاده از رابط کاربری آسان‌تر این کار را انجام می‌دهیم.

Screenshot 2023-07-15 at 10 16 41 AM

نحوه ی protected کردن شاخه اصلی: (که در اینجا حتما نیاز است قبل از درخواست ادغام pull request بررسی شود و از تغییر مستقیم روی master جلوگیری می شود):

Screenshot 2023-07-15 at 10 52 11 AM

سوالات

پوشه‌ی .git چیست؟ چه اطلاعاتی در آن ذخیره می‌شود؟ با چه دستوری ساخته می‌شود؟


پوشه «.git» یک پوشه مخفی است که هنگام اجرای دستور «git init» در یک مخزن Git ایجاد می شود. این پوشه شامل تمام اطلاعات لازم برای کنترل نسخه، از جمله تاریخچه commit، آدرس مخزن remote و سایر اطلاعات مربوط به مخزن است. پوشه «.git» دارای زیردایرکتوری هایی برای refs/heads، refs/tag ها و فایل های template است.

منظور از atomic بودن در atomic commit و atomic pull-request چیست؟


در گیت، commit اتمی به کامیتی گفته می‌شود که نشان‌دهنده یک تغییر یا subtask است. این نوع کامیت، تقسیم ناپذیر است، یعنی می تواند به طور کامل موفق شود یا به طور کامل شکست بخورد، اما نمی تواند تا حدی موفق شود یا تا حدی شکست بخورد. به طور مشابه، atomic pull-request به یک pull-request اشاره دارد که نشان دهنده یک تغییر واحد است. استفاده از pull-request به‌عنوان تغییرات اتمی آسان‌تر و ایمن‌تر است، زیرا می‌توانیم یک pull-request را به‌عنوان یک commit ادغام کنیم و اگر مشکلی پیش آمد، pull-request را به طور کامل برگردانیم.

تفاوت دستورهای fetch و pull و merge و rebase را بیان کنید.


  • دستور git fetch: آخرین تغییرات را از یک مخزن remote به مخزن local اعمال می کند، اما working directory را تغییر نمی دهد.

  • دستور git pull: تغییرات را از یک مخزن remote در شاخه فعلی اعمال می‌کند. در حالت پیش‌فرض، git pull نسخه کوتاه شده دو دستور git fetch و به دنبال آن git merge FETCH_HEAD ،است. با اسفاده از فلگ --rebase، دستور git rebase را به جای git merge اجرا می کند.

  • دستور git merge: تغییرات از شاخه های مختلف را در شاخه فعلی تلفیق می کند.

  • دستور git rebase: به جای ایجاد یک commit جدید که دو شاخه را با هم ترکیب می کند، commit های یک شاخه را بر روی دیگری منتقل می کند.

تفاوت اصلی بین git pull و git fetch این است که git pull به طور خودکار تغییرات را در شاخه فعلی ادغام می کند، در حالی که git fetch فقط تغییرات را در مخزن محلی شما دانلود می کند. تفاوت بین git merge و git rebase در این است که git merge یک commit جدید ایجاد می کند که تغییرات شاخه های مختلف را ترکیب می کند، در حالی که git rebase کامیت های یک شاخه را روی شاخه دیگر منتقل می کند.

تفاوت چهار دستور reset و revert و restore را بیان کنید.


  • دستور git reset: این دستور به شما اجازه می‌دهد تا تغییرات استیج شده را بازگردانید و یا به یک کامیت خاص در تاریخچه بروید. reset می‌تواند در سه حالت --soft، --mixed و --hard اجرا شود که هر کدام تاثیرات متفاوتی بر روی مخزن شما دارند. به طور کلی، استفاده از reset برای بازگشت به یک نقطهٔ قبلی در تاریخچهٔ مخزن و حذف تغییرات نامطلوب استفاده می‌شود.

  • دستور git revert: این دستور یک کامیت را انتخاب می‌کند و تغییرات آن را خنثی می‌کند. در واقع، با استفاده از revert شما یک کامیت جدید می‌سازید که تغییرات کامیت قبلی را لغو می‌کند. بنابراین، تاریخچهٔ مخزن شما حفظ می‌شود و شما می‌توانید به سادگی به نقطهٔ قبل بازگردید.

  • دستور git restore: دستور restore برای بازیابی یک فایل خاص در مخزن Git به یک وضعیت قبلی استفاده می‌شود. با استفاده از این دستور، می‌توانید تغییراتی که در یک فایل انجام شده است، را بازیابی کنید. در این دستور، گزینه‌های مختلفی مانند --source و --staged وجود دارد. گزینه --source فایل را به وضعیت commit قبلی بازیابی می‌کند. گزینه --staged فایل را به وضعیت تسک ها (staging area) بازیابی می‌کند، به این معنی که تغییراتی که به تسک ها اضافه شده بودند، حذف می‌شوند و فایل به حالت قبلی بازگردانده می‌شود. این دستور در نسخه 2.23 گیت به عنوان جایگزین دستورات checkout و reset معرفی شد. با استفاده از restore شما می‌توانید فایل‌های خود را به نسخهٔ ذخیره شده در استیج یا گذشته بازگردانید. این دستور برای بازگشت فایل‌های تغییر یافته به نسخهٔ قبل استفاده می‌شود.

منظور از stage چیست؟ دستور stash چه کاری را انجام می‌دهد؟


در گیت، stage یا index نام یک مرحلهٔ میانی است که در فرایند کامیت استفاده می‌شود. این مرحله اجازه می‌دهد تا تغییرات خود را برای کامیت آماده کنید و فقط بخش‌های خاصی از تغییرات اعمال شده از آخرین کامیت را کامیت کنید. نویسندگان گیت تصمیم گرفته‌اند که این مرحله را قابل مشاهده و پایدار کنند، در حالی که در سایر سیستم‌های کنترل نسخه، این مرحله بخش زودگذری از فرایند کامیت است.

دستور git stash یک راه برای ذخیرهٔ تغییرات کامیت نشده (شامل هم تغییرات استیج شده و هم تغییرات استیج نشده) برای استفادهٔ بعدی و بازگشت آن‌ها از کپی کار شماست. شما می‌توانید از git stash استفاده کنید وقتی می‌خواهید به شاخه‌ای دیگر سوئیچ کنید یا عملیات دیگر گیت را بدون کامیت تغییرات فعلی خود انجام دهید. برای ذخیرهٔ تغییرات خود، می‌توانید git stash را اجرا کنید و پیام دریافت خواهید کرد که تغییرات شما در شاخهٔ شما ذخیره شده‌اند. شما می‌توانید وقتی آماده هستید، stash خود را دوباره اعمال کنید.

مفهوم snapshot به چه معناست؟


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

هر snapshot در گیت با یک آیدی شناخته می‌شود که به آن commit hash یا SHA-1 hash می‌گویند. این شناسه یکتا به شما اجازه می‌دهد تا به راحتی به snapshot مورد نظر خود دسترسی پیدا کنید و تغییراتی که در آن کامیت اعمال شده است را مشاهده کنید.

به طور خلاصه، در گیت، snapshot به معنای یک کامیت است که شامل تمامی تغییراتی است که در آن کامیت اعمال شده‌اند و هر snapshot با یک شناسه یکتا شناخته می‌شود. این snapshot ها امکان مشاهده تاریخچه تغییرات در مخزن Git را به شما می‌دهند.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages