Беше обявено пускането на разпределената система за контрол на кода Git 2.37. Git е една от най-популярните, надеждни и високопроизводителни системи за контрол на версиите, предоставяща гъвкави нелинейни инструменти за разработка, базирани на разклоняване и сливане. За да се осигури целостта на историята и устойчивостта на промени със задна дата, във всеки комит се използва имплицитно хеширане на цялата предишна история; също така е възможно да се удостоверят отделни тагове и ангажименти с цифрови подписи на разработчиците.
В сравнение с предишната версия, в новата версия бяха приети 395 промени, подготвени с участието на 75 разработчици, от които 20 участваха в разработката за първи път. Основни иновации:
- Механизмът на частични индекси (разреден индекс), покриващ само част от хранилището, е готов за широко използване. Частичните индекси могат да подобрят производителността и да спестят място в хранилища, които извършват операции за частично клониране (разредено плащане) или работят с непълно копие на хранилището. Новата версия завършва интегрирането на частични индекси в командите git show, git sparse-checkout и git stash. Най-забележимата полза от производителността от използването на частични индекси се наблюдава при командата git stash, която е отбелязала 80% увеличение на скоростта на изпълнение в някои ситуации.
- Въведен е нов механизъм „cruft packs“ за опаковане на недостъпни обекти, които не са посочени в хранилището (не са посочени от клонове или тагове). Недостъпните обекти се изтриват от събирача на отпадъци, но остават в хранилището за определено време, преди да бъдат изтрити, за да се избегнат условия на състезание. За да се проследи периодът на поява на недостъпни обекти, е необходимо към тях да се прикачат тагове с времето на промяна на подобни обекти, което не позволява съхраняването им в един пакетен файл, в който всички обекти имат общо време на промяна. Преди това запазването на всеки обект в отделен файл водеше до проблеми, когато имаше голям брой нови, недостъпни обекти, които все още не отговаряха на условията за изтриване. Предложеният механизъм „cruft packs“ ви позволява да съхранявате всички недостъпни обекти в един пакетен файл и да отразявате данните за времето за модификация на всеки обект в отделна таблица, съхранена във файл с разширение „.mtimes“.
- За Windows и macOS има вграден механизъм за проследяване на промените във файловата система, което ви позволява да избегнете повторение на цялата работна директория, когато извършвате операции като „git status“. По-рано, за проследяване на промените, външни помощни програми за проследяване на промени във FS, като Watchman, можеха да бъдат свързани чрез куки, но това изискваше инсталирането на допълнителни програми и конфигурация. Сега посочената функционалност е вградена и може да бъде активирана с командата „git config core.fsmonitor true“.
- В командата „git sparse-checkout“ поддръжката за алтернатива на режима „—cone“, методът за дефиниране на шаблони за частично клониране, е обявена за остаряла, което позволява при определяне на частта от хранилището, която е обект на операцията по клониране, за изброяване на отделни файлове с помощта на синтаксиса „.gitignore“, който не позволява използването на частични индекси за оптимизация.
- Повишена гъвкавост при конфигуриране на извикването на fsync() за изтриване на промените на диска. Към параметъра „core.fsyncMethod“ е добавена поддръжка за стратегията за „партидна“ синхронизация, която позволява ускоряване на работата при запис на голям брой отделни файлове чрез натрупване на промени в кеша за обратно записване, който се нулира от единичен fsync() обадете се. Тестът, който доведе до добавяне на 500 файла с помощта на командата „git add“, беше завършен за 0.15 секунди, когато новият режим беше активиран, докато извикването на fsync() отне 1.88 секунди за всеки файл, а без използване на fsync - 0.06 секунди.
- Командите за преминаване на разклонения като „git log“ и „git rev-list“ вече имат опция „-since-as-filter=X“, която ви позволява да филтрирате информация за ангажименти, които са по-стари от „X“. За разлика от опцията „—since“, новата команда е имплементирана като филтър, който не спира търсенето след първия комит, по-стар от определеното време.
- В командата “git remote” при посочване на флага “-v” се показва информация за частични клонинги на хранилището.
- Добавена е настройката „transfer.credentialsInUrl“, която може да приема стойностите „warn“, „die“ и „allow“. Ако е посочено в параметъра „remote. .url" идентификационни данни с обикновен текст, опитът за извършване на операция "fetch" или "push" ще се провали с грешка, ако настройката "transfer.credentialsInUrl" е зададена на "die", или предупреждение, ако е зададена на "warn".
- По подразбиране е активирана новата реализация на интерактивния режим на командата „git add -i“, пренаписана от Perl на C.
Източник: opennet.ru
