پس از سه ماه توسعه، Git 2.52، یک سیستم مدیریت کد منبع توزیعشده، منتشر شد. Git از عملکرد بالایی برخوردار است و قابلیتهای توسعه غیرخطی مبتنی بر شاخهبندی و ادغام را ارائه میدهد. برای اطمینان از یکپارچگی تاریخی و انعطافپذیری در برابر تغییرات گذشتهنگر، از هش ضمنی کل تاریخچه قبلی در هر کامیت و همچنین امضاهای دیجیتالی برچسبها و کامیتهای منفرد استفاده میکند. Git تحت مجوز GPLv2+ منتشر شده است.
در مقایسه با نسخه قبلی، نسخه جدید شامل ۶۳۷ تغییر است که توسط ۹۴ توسعهدهنده (۳۳ نفر از آنها در توسعه گیت تازهکار بودند) انجام شده است. ویژگیهای کلیدی جدید (۱، ۲، ۳):
- دستور "git last-modified" برای نمایش لیستی از فایلها در یک ویرایش مشخص و آخرین کامیتهایی که هر فایل را تغییر دادهاند، اضافه شد. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
- دستور "git repo" برای انجام اقدامات مربوط به بازیابی اطلاعات از یک مخزن اضافه شد. دو زیردستور، "git repo info" و "git repo structure"، ارائه شدهاند که اطلاعات مربوط به تنظیمات مخزن و جزئیات مربوط به ساختار مخزن را نمایش میدهند (برای مثال، میتوانید تعداد ارجاعات و اشیاء موجود در مخزن را بیابید). $ git repo info object.format references.format object.format=sha1 references.format=reftable $ git repo structure | ساختار مخزن | مقدار | | ———————— | —— | | * ارجاعات | | | * تعداد | ۱۹۸۳ | | * شاخهها | ۴ | | * برچسبها | ۱۱۲۵ | | * ریموتها | ۸۵۴ | | * سایر | ۰ | | | | | * اشیاء قابل دسترسی | | | * تعداد | ۵۱۸۹۵۵ | | * کامیتها | ۷۷۴۶۹ | | * درختها | ۱۸۸۸۶۵ | | * حبابها | ۲۵۱۶۳۱ | | * برچسبها | ۹۹۰ |
- دستور git refs با سه زیردستور بهروزرسانی شده است که عملیات سطح پایینِ ناهمگون و همپوشانیدار روی ارجاعها را یکپارچه میکنند (git for-each-ref، git show-ref، git update-ref و git pack-refs):
- «git refs optimize» — بهینهسازی backend ذخیرهسازی مرجع (مشابه «git pack-refs»).
- «git refs list» - فهرستی از تمام ارجاعات را نمایش میدهد (مشابه «git for-each-ref» یا «git show-ref»).
- «git refs exists» — وجود یک ارجاع را بررسی میکند (مشابه با «git show-ref --exists»).
- قالب خروجی گرفتن و وارد کردن تاریخچه کامیتها گسترش یافته است تا از امضاهای رمزنگاری با استفاده از شناسههای شیء مبتنی بر SHA-1 و SHA-256 پشتیبانی کند. دستور "git fast-import" اکنون از پردازش برچسبهای امضا شده مشابه کامیتهای امضا شده پشتیبانی میکند. گزینههای "--signed-commits=<mode>" و "--signed-tags=<mode>" برای کنترل پردازش کامیتها و برچسبهای امضا شده در حین وارد کردن اضافه شدهاند (حالت میتواند verbatim، warn-verbatim، warn-stri، strip یا abort باشد).
- دستور "git maintenance" اکنون از یک استراتژی جدید "geometric" ("git config set maintenance.strategy geometric") پشتیبانی میکند که زمان نگهداری را برای مخازن تکی بزرگ کاهش میدهد. در مقایسه با استراتژی قبلی که از منطقی مشابه "git gc" استفاده میکرد، استراتژی جدید از بستهبندی مجدد همه اشیاء جلوگیری میکند و عملیات فشرده منابع مانند ادغام همه فایلهای بسته را حذف میکند (در صورت امکان، ادغام به صورت جزئی و بدون حذف اشیاء حذف شده انجام میشود).
- دستور 'git sparse-checkout clean' اضافه شد تا بازیابی وضعیت دایرکتوری کاری با حذف فایلهایی که با تعریف جدید sparse-checkout مطابقت ندارند و نباید طبق تنظیمات فعلی sparse-checkout در کپی محلی وجود داشته باشند، آسانتر شود.
- برای حذف پیچیدگی از کدبیس و سادهسازی نگهداری، یک بازسازی (refactoring) انجام شد تا استفاده از متغیر سراسری the_repository کاهش یابد.
- استفاده از فیلترهای بلوم، یک چارچوب احتمالی برای بررسی عضویت مجموعه که امکان تشخیص مثبت کاذب عناصر از دست رفته را فراهم میکند اما از حذف عناصر موجود جلوگیری میکند، گسترش یافته است. فیلترهای بلوم اکنون برای سرعت بخشیدن به جستجوها در تاریخچه تغییرات هنگام مشخص کردن کاراکترهای جایگزین در مسیرهای فایل، به عنوان مثال "foo/bar/*/baz" استفاده میشوند.
- عملکرد دستور "git describe" به لطف استفاده از صف اولویتدار تا 30٪ افزایش یافته است. عملیات تغییر نام مرجع در "git remote rename" تسریع شده است. استفاده از اندیسها در "git ls-files" گسترش یافته است. دستور "git log -L" با حذف مقایسههای سه سطحی غیرضروری هنگام پردازش ادغام کامیتها، به طور قابل توجهی تسریع شده است. بهینهسازیهایی در کتابخانه xdiff انجام شده است.
- یک پیادهسازی اختیاری Rust از برخی توابع داخلی، مانند رمزگذاری و رمزگشایی اعداد صحیح با طول متغیر، معرفی شده است. کد Rust به طور پیشفرض استفاده نمیشود و نیاز به فعال بودن پرچم ساخت WITH_RUST دارد. در آینده، انتظار میرود اجزای داخلی مهمتر Git در Rust بازنویسی شوند و Rust به عنوان یک وابستگی ساخت مورد نیاز در Git 3.0 اضافه شود.
- فهرست تغییرات مهمی که در شاخه Git 3.0 اعمال خواهند شد، بهروزرسانی شده است. در Git 3.0، تنظیم پیشفرض init.defaultBranch به "main" تغییر خواهد کرد، به این معنی که شاخه پیشفرض در مخازن ایجاد شده با دستور "git init" به جای "master" "main" نامگذاری خواهد شد. همچنین به تغییر به شناسههای شیء مبتنی بر SHA-256 هنگام مقداردهی اولیه مخازن جدید اشاره شده است. برای سادهسازی قابلیت حمل بین مخازن با شناسههای شیء مبتنی بر SHA-1 و SHA-256، اکنون امکان ارسال و دریافت از یک مخزن با استفاده از یک الگوریتم هشینگ و یک مخزن با استفاده از یک الگوریتم هشینگ متفاوت در دسترس است.
منبع: opennet.ru
