گیت ۲.۵۳، یک سیستم مدیریت کد منبع توزیعشده، منتشر شد. گیت از عملکرد بالایی برخوردار است و قابلیتهای توسعه غیرخطی مبتنی بر شاخهبندی و ادغام را ارائه میدهد. برای اطمینان از یکپارچگی تاریخی و انعطافپذیری در برابر تغییرات گذشتهنگر، از هش ضمنی کل تاریخچه قبلی در هر کامیت و همچنین امضاهای دیجیتالی برچسبها و کامیتهای منفرد استفاده میکند. گیت تحت مجوز GPLv2+ منتشر شده است.
در مقایسه با نسخه قبلی، نسخه جدید شامل ۷۷۰ تغییر است که توسط ۱۳۷ توسعهدهنده (۶۶ نفر از آنها در توسعه گیت تازهکار بودند) انجام شده است. ویژگیهای کلیدی جدید عبارتند از:
- دستور "git history" پیادهسازی شده است و قابلیتهای آزمایشی برای بازنویسی تاریخچه کامیتها را فراهم میکند که استفاده از آنها آسانتر و ایمنتر از ریبیس کردن کامیتها با "git rebase" است. دو عملیات ارائه شده است:
- تغییر کلمه تاریخچه گیت برای بازنویسی پیام در کامیت مشخص شده بدون تغییر درخت کاری یا فهرست (به جز یادداشت، بقیه دست نخورده باقی میمانند). به عنوان مثال، برای رفع یک غلط املایی.
- تقسیم تاریخچه گیت » برای تقسیم تعاملی کامیت مشخص شده به دو کامیت مختلف، و انتقال بخشهای انتخاب شده از کامیت اصلی به کامیت اضافی.
نسخههای آینده شامل دستورات اضافی خواهند بود: "git history fixup" برای رفع یک کامیت، "git history drop" برای حذف یک کامیت، "git history reorder" برای تغییر ترتیب کامیتها و "git history squash" برای حذف کامیتها.
- یک روش جدید برای تعریف قلابها در فایلهای پیکربندی پیادهسازی شده است. به جای قرار دادن اسکریپتهای دارای قلاب در دایرکتوری ".git/hooks" در هر مخزن، اکنون میتوان دستورات مربوط به فراخوانی قلابها را مستقیماً در فایلهای پیکربندی مشخص کرد. تنظیمات را میتوان به یک مخزن پیوند داد یا در فایلهای پیکربندی که برای همه مخازن (/etc/gitconfig) یا مخازن کاربر (~/.gitconfig) اعمال میشوند، مشخص کرد. چندین قلاب را میتوان به یک رویداد واحد محدود کرد. اسکریپتهای ".git/hooks" همچنان فراخوانی میشوند، اما پس از قلابهای فایلهای پیکربندی اجرا میشوند. برای مشاهده لیست قلابها، از دستور "git hook list" استفاده کنید و برای غیرفعال کردن انتخابی فراخوانی قلاب، از تنظیم "hook" استفاده کنید. .enabled = false." [hook "linter"] event = pre-commit command = ~/bin/linter --cpp20 [hook "no-leaks"] event = pre-commit command = ~/bin/leak-detector $ git hook list pre-commit global linter ~/bin/linter --cpp20 local no-leaks ~/bin/leak-detector
- دستور "git maintenance" به طور پیشفرض از استراتژی "geometric" ("git config set maintenance.strategy geometric") استفاده میکند که زمان نگهداری را برای مخازن تکی بزرگ کاهش میدهد. در مقایسه با استراتژی قبلی که از منطقی مشابه "git gc" استفاده میکرد، استراتژی جدید از بستهبندی مجدد همه اشیاء جلوگیری میکند و عملیات فشرده منابع مانند ادغام همه فایلهای بسته را حذف میکند (در صورت امکان، ادغام به صورت جزئی و بدون پاک کردن اشیاء حذف شده انجام میشود).
- پایگاه داده شیءگرا (ODB) و APIهای مرتبط با آن به معماری جدیدی مبتنی بر backendهای قابل اتصال منتقل شدهاند. این تغییر ساختار، فرمت ذخیرهسازی شیء را انتزاعی میکند و امکان پیادهسازی ویژگیهایی مانند backendهای جایگزین و فرمتهای شیءگرا را فراهم میکند، به عنوان مثال، برای ذخیرهسازی کارآمدتر فایلهای باینری بزرگ یا برای بهینهسازی عملکرد سرویسهای میزبانی Git بزرگ.
- دستور "git repo structure" که اطلاعات مربوط به ساختار مخزن را نمایش میدهد، نه تنها اندازه کل، بلکه بزرگترین اشیاء از هر نوع را نیز نمایش میدهد و به شما امکان میدهد بدون استفاده از ابزار شخص ثالث git-sizer اندازه را تخمین بزنید. $ git repo structure … | * بزرگترین اشیاء | | | * کامیتها | | | * حداکثر اندازه [1] | 17.23 کیلوبایت | | * حداکثر والدها [2] | 10 | | * درختها | | | * حداکثر اندازه [3] | 58.85 کیلوبایت | | * حداکثر ورودیها [4] | 1.18 کیلوبایت | | * حبابها | | | * حداکثر اندازه [5] | 1019.51 کیلوبایت | | * برچسبها | | | * حداکثر اندازه [6] | 7.13 کیلوبایت |
- در دستور "git replay" که به جای "git rebase" برای بازسازی تاریخچه استفاده میشود سرور بدون یک درخت کاری، بهروزرسانیهای اتمی ref به طور پیشفرض فعال هستند (به جای فهرست کردن دستورات update-ref برای اجرای دستی)، گزینه "--revert" برای لغو تغییرات از یک سری commitها پیادهسازی شده است، در نتیجه commitهای خالی حذف میشوند و قابلیت بازسازی تاریخچه به commit ریشه معرفی شده است.
- گزینه "--maximal-only" به "git rev-list" و دستورات مشابه اضافه شد تا فقط کامیتهایی نمایش داده شوند که توسط سایر کامیتها قابل دسترسی نیستند.
- دستور "git repo info" اکنون گزینه "--keys" را برای فهرست کردن تمام کلیدهای شناخته شده دارد.
- هنگام پیمایش بین بلوکهای کد با استفاده از کلیدهای "J" و "K" در دستور "git add -p"، بلوکهای از قبل تأیید شده و رد شده اکنون علامتگذاری میشوند. گزینه "--no-auto-advance" برای غیرفعال کردن پیشروی خودکار به فایل بعدی اضافه شده است و به شما امکان میدهد قبل از کامیت کردن، فایلهای قبلی را دوباره مرور کنید.
- رابط وب «gitweb» برای استفاده در دستگاههای تلفن همراه بهینه شده است.
- دستور "git apply --directory" تضمین میکند که مسیرهای فایل قبل از استفاده نرمالسازی شوند، مانند "./un/../normalized/path".
- امکان اضافه کردن زیردستورات سفارشی با قرار دادن فایلهای "git-" مستند شده است. » در دایرکتوری حاوی فایلهای اجرایی.
- پشتیبانی از گواهیهای کلاینت به دستور 'git send-email' اضافه شده است.
- دستور "git status" اکنون دارای تنظیم "status.compareBranches" است که به شما امکان میدهد شاخههایی را برای مقایسه شاخه فعلی با آنها مشخص کنید. [status] compareBranches = @{upstream} @{push}
- گزینه "--trailer" به git rebase اضافه شده است تا افزودن فراداده به همه کامیتها آسانتر شود. git rebase --trailer "بررسی شده توسط: تست »
- دستور 'git fast-import' اکنون قابلیت جایگزینی امضاها را برای کامیتهایی که پس از وارد کردن نامعتبر میشوند، دارد.
- پشتیبانی از فشردهسازی شاخص چندبستهای (MIDX) اضافه شده است، که لایههای شاخص MIDX کوچک حاوی اطلاعات در دسترس بودن اشیاء و بیتمپهای مرتبط را ترکیب میکند و تعداد لایههای انباشته شده در مخازن قدیمی را کاهش میدهد.
- دستور "git backfill" اکنون از تعیین ویرایشها (محدودههای کامیت) و ماسکهای مسیر (مشخصات مسیر) برای محدود کردن بخشهایی از تاریخچه تغییرات که دانلود میشوند، پشتیبانی میکند. git backfill main~100..main git backfill — '*.c'
- فرمهای جایگزین برای فراخوانی دستور "git config list" اضافه شد: "git config -l" و "git config --list".
- کاراکترهای غیر ASCII را در نامهای مستعار فرمان مشخص شده در فایل پیکربندی مجاز کنید. [alias "get"] command = fetch
- نمایش امضاهایی که کلیدهای GPG آنها منقضی شده اما در زمان امضای کامیت معتبر بودهاند، تغییر کرده است. این امضاها اکنون به عنوان امضاهای معتبر با یادداشتی در مورد انقضای کلید نمایش داده میشوند (قبلاً، آنها با رنگ قرمز برجسته میشدند و این تصور را ایجاد میکردند که نامعتبر هستند).
- هنگام دسترسی به مخازن از طریق HTTP، کد خطای ۴۲۹ (درخواستهای بیش از حد) اکنون به درستی مدیریت میشود. درخواستهایی که با این خطا شکست میخورند، دیگر به عنوان خطای مهلک در نظر گرفته نمیشوند، بلکه به عنوان خطاهای موقتی در نظر گرفته میشوند که عملیات باید پس از مدت زمان مشخصی دوباره انجام شود. تأخیر در تلاش مجدد با استفاده از گزینه "http.retryAfter" تنظیم میشود، تعداد تلاشهای مجدد "http.maxRetries" و زمان انقضا "http.maxRetryTime" است.
منبع: opennet.ru
