След два месеца разработка е публикувана новата версия на дистрибутираната система за управление на изходния код Git 2.45. Git е една от най-популярните, надеждни и високо производителни системи за управление на версии, предоставяща гъвкави инструменти за нелинейна разработка, базирани на клонове и сливания. За осигуряване на целостта на историята и устойчивостта на 'обратни' промени се използва неявно хеширане на цялата предходна история във всеки комит, както и удостоверяване с цифрови подписи на отделните тагове и комити от разработчиците. Кодът на Git е разпространен под лицензия GPLv2+.
В сравнение с предишната версия, в новата версия са внесени 540 промени, подготвени с участието на 96 разработчици, от които 35 за първи път участват в разработката. Основни нововъведения:
- Добавена е предварителна поддръжка на бекенда 'reftable' за ефективно съхранение в хранилището на линкове към клонове и тагове. Новият бекенд използва блочно хранилище, което се прилага от проекта JGit и е оптимизирано за съхранение на много голям брой линкове (традиционните формати за съхранение на линкове водят до значителни разходи за производителност в хранилища с много линкове поради наличието на много файлове в една директория, когато линковете се съхраняват в директорията $GIT_DIR/refs или необходимостта от презаписване на един голям файл при всяко обновление, когато линковете се съхраняват в файла $GIT_DIR/packed_refs). Новият бекенд се активира чрез указание на опция '--ref-format=reftable' при инициализация на хранилището ('git init --ref-format=reftable /path/to/repo') и позволява да се ускори търсенето, четенето и записването в хранилища с много линкове.
- Предоставени са средства за осигуряване на преносимост между идентификаторите на обекти на базата на хешове SHA-1 и SHA-256. За осигуряване на работа с хешове SHA-1 и SHA-256 в едно хранилище, по време на постепенното мигриране към хешове SHA-256, е предложен нов формат на обекти 'compatibility', който позволява да се се referencе на обекти не само по основния хеш, зададен при инициализация на хранилището, но и по резервен хеш. Например, при инициализация на хранилище може да се избере формат SHA-256, а в качеството на резервен да се определи хеш SHA-1: git init --object-format=sha256 /path/to/repo cd /path/to/repo git config extensions.compatObjectFormat sha1
- В командата «git rev-list» е добавена възможността за показване на идентификатори на обекти, които липсват в локалното хранилище, дори и да не са достигаеми в клона или етикета, което може да се използва за диагностика на повредени хранилища: git rev-list —missing=print —all | grep ‘^?’ ?70678e7afeacdcba1242793c3d3d28916a2fd152
- Добавена е нова команда «git reflog list» за показване на известни reflog-ове и съответстващите им препратки към етикети и клонове.
- Предоставена е възможност за определяне на алтернативни префикси за изхода на «git diff», показвани пред файловия път и обозначаващи състоянието преди и след определена версия на файла (по подразбиране се използват префиксите «a/» и «b/»). За задаване на собствени префикси в конфигурацията са добавени нови параметри diff.srcPrefix и diff.dstPrefix.
- Добавен е параметър core.commentString за определяне на разделителна линия, която ще се използва вместо символа «#» за игнориране на коментари в съобщението за комита. Преди достъпният настройка core.commentChar е адаптирана за поддръжка на многобайтови символи като разделител на коментарите (преди това се поддържаха само ASCII символи).
- В командата «git config» е добавена опция «—comment», която позволява запазването на коментари в файла .gitconfig за обяснение на същността на определени настройки. git config —comment ‘да покаже основата на сливането’ merge.conflictStyle diff3 tail -n 2 .git/config [merge] conflictStyle = diff3 # да покаже основата на сливането
- В командата «git cherry-pick» е добавена опция «—empty» за автоматично премахване на излишни комити, по аналогия с опцията «—empty» в git-rebase и git-am.
- В командата «git checkout -p» е разрешено използването на символа «@» като синоним на името «HEAD».
Източник: opennet.ru
