پس از دو ماه توسعه، سیستم کنترل منبع توزیع شده Git 2.39 منتشر شد. Git یکی از محبوبترین، قابل اعتمادترین و با کاراییترین سیستمهای کنترل نسخه است که ابزار توسعه غیرخطی انعطافپذیر مبتنی بر شاخهبندی و ادغام را ارائه میکند. برای اطمینان از یکپارچگی تاریخچه و مقاومت در برابر تغییرات ماسبق، از هش ضمنی کل تاریخچه قبلی در هر commit استفاده میشود؛ همچنین میتوان تگها و تعهدات فردی را با امضای دیجیتالی توسعهدهندگان تأیید کرد.
در مقایسه با نسخه قبلی، نسخه جدید شامل 483 تغییر بود که با مشارکت 86 توسعه دهنده تهیه شد که از این تعداد 31 نفر برای اولین بار در توسعه شرکت کردند. نوآوری های اصلی:
- دستور "git shortlog" که برای نمایش خلاصه هایی با آمار از تاریخچه تغییرات طراحی شده است، یک گزینه "-group" را برای گروه بندی دلخواه تعهدات بر اساس فیلدهایی که محدود به نویسنده یا committer نیست اضافه کرده است. به عنوان مثال، برای نمایش لیستی از توسعه دهندگان با اطلاعاتی در مورد تعداد تغییرات، با در نظر گرفتن کمک های ذکر شده در قسمت "Co-authored-by"، می توانید از دستور git shortlog -ns --group=author - استفاده کنید. -group=تریلر:تألیف مشترک
خروجی Shortlog را می توان با استفاده از مشخص کننده های قالب بندی جمع کرد، و گزینه "--group" می تواند به طور قابل توجهی ایجاد گزارش های پیچیده را ساده کند و نیاز به دستورات مرتب سازی اضافی را از بین ببرد. به عنوان مثال، برای ایجاد یک گزارش با اطلاعاتی درباره تعداد commit برای یک نسخه معین در هر ماه، میتوانید مشخص کنید: git shortlog v2.38.0.. —date='format:%Y-%m' —group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 قبلاً برای انجام یک عملیات مشابه، استفاده از ابزار مرتب سازی و uniq ضروری بود: git log2.38.0 vXNUMX. .. —date='format:%Y -%m' —format='%cd' | مرتب سازی | uniq -c
- قابلیتهای مکانیزم «بستههای کرفت»، طراحیشده برای بستهبندی اشیاء غیرقابل دسترس که در مخزن به آنها ارجاع نشدهاند (بهوسیله شاخهها یا برچسبها به آنها اشاره نمیشود)، گسترش یافته است. اشیای غیرقابل دسترس توسط جمعآورنده زباله حذف میشوند، اما برای جلوگیری از شرایط مسابقه، قبل از حذف برای مدت زمان معینی در مخزن باقی میمانند. مکانیسم "Craft packs" به شما این امکان را می دهد که تمام اشیاء غیرقابل دسترس را در یک فایل بسته ذخیره کنید و داده های مربوط به زمان تغییر هر شی را در یک جدول جداگانه که در یک فایل جداگانه با پسوند ".mtimes" ذخیره شده است، نمایش دهید تا این کار انجام شود. با کل زمان اصلاح همپوشانی نداشته باشد.
مدت زمانی که اشیاء غیرقابل دسترسی قبل از حذف واقعی در مخزن باقی می مانند با گزینه "—prune=" تعیین می شود. " با این حال، در حالی که تأخیر قبل از حذف یک روش نسبتاً مؤثر و عملی برای جلوگیری از فساد مخزن به دلیل شرایط مسابقه است، اما 100٪ قابل اعتماد نیست. برای آسانتر کردن بازیابی مخزن آسیبدیده، نسخه جدید با افزودن گزینه «--expire-to» به دستور «git repack» امکان ذخیره اشیاء گمشده را فراهم میکند که به شما امکان میدهد یک فایل را برای ایجاد یک فایل خارجی مشخص کنید. کپی از تمام اشیاء حذف شده به عنوان مثال، برای ذخیره اشیاء غیرقابل دسترس که در 5 دقیقه گذشته تغییر نکرده اند در فایل backup.git، می توانید از دستور git repack --cruft --cruft-expiration=5.minutes.ago -d --expire استفاده کنید. -to=../backup.git
- به طور قابل توجهی (تا 70٪) سرعت عملیات "git grep-cached" هنگام جستجو در مناطقی که از شبیه سازی جزئی (پراکنده-بازرسی) استفاده می کنند و شاخص های جزئی برای آنها وجود دارد (شاخص پراکنده) افزایش یافته است. قبلاً هنگام تعیین گزینه "-cached" ، جستجو ابتدا در فهرست معمولی و سپس در موارد جزئی انجام می شد که منجر به تاخیرهای قابل توجه هنگام جستجو در مخازن بزرگ می شد.
- تأیید سرور از انسجام اشیاء جدید قبل از قرار دادن آنها در مخزن در طول عملیات "git push" تسریع شده است. با تغییر به حسابداری فقط پیوندهای اعلام شده هنگام بررسی، در یک مخزن آزمایشی با 7 میلیون پیوند، که تنها 3٪ از آنها تحت پوشش عملیات فشار قرار می گیرند، بهینه سازی های انجام شده امکان کاهش 4.5 برابری زمان بررسی را فراهم می کند.
- برای محافظت در برابر سرریز اعداد صحیح بالقوه در کد، دستور "git application" حداکثر اندازه وصله های قابل پردازش را محدود می کند. اگر اندازه پچ از 1 گیگابایت بیشتر شود، اکنون یک خطا نمایش داده می شود.
- برای محافظت در برابر آسیبپذیریهای احتمالی، تغییراتی برای پاک کردن اطلاعات غیرضروری از هدرهای تنظیم شده هنگام استفاده از ماژول h2h3 با گزینه GIT_TRACE_CURL=1 یا GIT_CURL_VERBOSE=1 همراه با HTTP/2 ایجاد شده است.
- هنگام انجام چک کردن شاخه ای که یک پیوند نمادین به یک شاخه دیگر است، دستور "git symbolic-ref HEAD" اکنون به جای نام پیوند نمادین، نام شاخه هدف را نشان می دهد.
- پشتیبانی از آرگومان @{-1} را به گزینه "--edit-description" ("git branch —edit-description @{-1}") برای ویرایش توضیحات شاخه قبلی اضافه کرد.
- دستور "git merge-tree --stdin" را برای ارسال لیستی از گزینه ها از طریق ورودی استاندارد اضافه کرد.
- در سیستم های فایل شبکه، کنترل کننده fsmonitor که تغییرات در سیستم فایل را نظارت می کند، به طور پیش فرض غیرفعال است.
منبع: opennet.ru