This project consists of 3 branches:
- main: the mainstream of the project
- validation hotfix: a bug detected in validation method and it needed to be fixed
- prioritization_improvement: the prioritization has a major bug and was fixed
The starting point of the application is this line:
if __name__ == '__main__':
calculate()پوشهی .git پوشهی اصلی است که گیت اطلاعات خود را در آن ذخیره میکند و با دستور git init ساخته میشود
منظور از atomic بودن این است که هر کامیت دقیقا یک کار مشخص انجام دهد و یک توسعهی مشخص داشته باشد. اگر در یک کامیت چندین تغییر محسوس در کد داشته باشیم، این کامیت اتمیک نیست. هر کامیت باید مرتبط با یک تغییر باشد؛ البته یک تغییر میتواند مربوط به چندین فایل باشد.
دستور merge تغییراتی که کد ما نسبت به کد برنچ دارد را در هم میآمیزد و یک کد نهایی به ما خروجی میدهد. ممکن است در این فرایند به دلیل کار کردن چند نفر بر روی یک فایل به کانفلیکت بخوریم. دستور fetch صرفا تمامی تغییراتی که از زمان آخرین بارگیری روی برنچ انجام شده را دریافت میکند و merge نمیکند. دستور pull تغییرات را دریافت میکند و مستقیما مرج میکند.
دستور revert یک کامیت جدید ایجاد میکند که تغییرات یک کامیت خاص را undo کند. بنابر این اگر میخواهیم به ۳ کامیت قبل برگردیم، باید ۳ بار revert کنیم.
دستور reset به کلی head کل برنچ را به کامیت مد نظر منتقل میکند و کامیتهای بعد از آن حتی از هیستوری کامیتها حذف میشوند.
دستور restore یک فایل را به آخرین کامیت روی برنچ برمیگرداند و تغییرات اشتباه لوکال از بین میرود.
دستور rebase برای یکی کردن دو برنچ مختلف استفاده میشود.
دستور stash فایلهای تغییر داده شده را به یک استک منتقل میکند. در نتیجه حتی با جابجایی بین برنچها و بدون انجام کامیت، آن فایلها قابل مشاهده هستند و تفاوت آنها با برنچ مشخص است. دستور استیج در اصل این فایلهای تغییر دادهشده را از استک، به mainstream گیت برمیگرداند تا بتوان آنها را کامیت کرد.
گیت تغییرات را به صورت کامیت نگه میدارد. اسنپشات به وضعیت کل کد در یک زمان خاص گفته میشود. در اصل دستور کامیت در دل خود یک اسنپشات از سیستم میگیرد و قبل و بعد از کامیت وضعیت فایلها کامل مشخص است.