След три месеца разработка, беше публикуван новият релиз на разпределената система за управление на изходния код Git 2.36. Git е една от най-популярните, надеждни и високопродуктивни системи за управление на версии, предоставяща гъвкави средства за нелинейна разработка, базирана на разклонения и сливане на клонове. За да се осигури целостта на историята и устойчивостта на промени „задна дата“, се използва неявно хеширане на цялата предишна история във всеки комит, също така е възможно удостоверяване с цифрови подписи на отделни тагове и комити.
В сравнение с предишния релиз, в новата версия са включени 717 промени, подготвени с участието на 96 разработчици, от които 26 участват в разработката за първи път. Основни нововъведения:
- В командите „git log“ и „git show“ е добавена опция „—remerge-diff“, която позволява да се покажат разликите между общия резултат от сливането и фактическите данни, отразени в комита след обработката на командата „merge“, което позволява визуално да се оценят промените, извършени в резултат на разрешаването на конфликти при сливане. Обикновената команда „git show“ разделя различните разрешения на конфликтите с отстъп, което затруднява разбирането на промените. Например, на снимката по-долу редовете „+/-“ без отстъп показват последното разрешение на конфликта, свързано с преименуването в първия клон sha1 на oid в коментара, а „+/-“ с отстъп — началното разрешение на конфликта, причинено от появата втората клон с допълнителен аргумент във функцията dwim_ref().

При използване на опцията „—remerge-diff“ разликите между разрешенията на конфликтите не се разделят за всеки родителски клон, а се показват общите разлики между файла с конфликти от сливането и файла, в който конфликтите са разрешени.

- Увеличена е гъвкавостта при настройването на поведението при сблъсък на дисковите кешове чрез извикване на функцията fsync(). Предишният параметър core.fsyncObjectFiles е разделен на две променливи за конфигурация core.fsync и core.fsyncMethod, предоставящи възможност за прилагане на fsync не само към файловете с обекти (.git/objects), но и към други структури на git, като референции (.git/refs), reflog и пакети.
Чрез променливата core.fsync може да се укаже списък с вътрешни структури на Git, за които след операция по запис ще се извика допълнително fsync. Променливата core.fsyncMethod позволява да се избере метод за изпразване на кеша, например, може да се избере fsync за прилагане на едноименния системен повик или да се укаже writeout-only за прилагане на отложен запис (pagecache writeback).
- За защита срещу уязвимости, манипулиращи с подмяна от други потребители на директории .git в споделени дялове, е усилена проверката на собственика на репозитория. Изпълнението на каквито и да било git команди вече е разрешено само в собствените директории " .git ". Ако директорията с репозитория е собственост на друг потребител, по подразбиране ще се изведе грешка. Указаното поведение може да бъде деактивирано с настройката safe.directory.
- Към командата „git cat-file“, предназначена за извеждане на изходното съдържание на Git обекти, е добавена опция „—batch-command“, която допълва преди наличните команди „—batch“ и „—batch-check“ с възможността за адаптивен избор на тип на изхода чрез указване на „contents “ за извеждане на съдържанието или „info “ за извеждане на информация за обекта. Допълнително се поддържа команда „flush“ за изпразване на изходния буфер.
- Към командата „git ls-tree“, предназначена за формиране на списък с съдържанието на дървото от обекти, е добавена опция „—oid-only“ („—object-only“), подобно на „—name-only“, която извежда само идентификаторите на обектите за опростяване на извикванията от скриптове. Освен това е реализирана опция „—format“, позволяваща да се определи собствен формат на изхода, комбинирайки информация за режим, тип, име и размер.
- В командата „git bisect run“ е реализирано определяне на неразрешеното за скрипта признака на изпълняем файл и извеждане на в този случай грешки с кодове 126 или 127 (по-рано, ако скриптът не може да бъде стартиран, всички ревизии се маркираха като имат проблеми).
- Към командата „git fetch“ е добавена опция „—refetch“ за извличане на всички обекти без уведомяване на другата страна за съдържанието, което вече се намира на локалната система. Подобно поведение може да бъде полезно за възстановяване на състоянието след сривове, когато няма сигурност в целостта на локалните данни.
- В командите «git update-index», «git checkout-index», «git read-tree» и «git clean» е добавена поддръжка на частични индекси (sparse index), което позволява да се подобри производителността и да се спести място в хранилищата, в които се извършват операции с частично клане (sparse-checkout).
- Променено е поведението на командата «git clone —filter=… —recurse-submodules», която сега води до частично клониране на субмодулите (по-рано при изпълнение на подобни команди филтърът се прилагаше само върху основното съдържание, а субмодулите се клонираха изцяло, без да се вземе предвид филтърът).
- В командата «git bundle» е добавена поддръжка за указване на филтри за селективно поставяне на съдържание, подобно на операциите с частично клониране.
- В командата «git branch» е добавена опция «—recurse-submodules» за рекурсивен обход на субмодулите.
- Нов обработчик за езика Kotlin е предложен в userdiff.
Източник: opennet.ru


