Екі айлық әзірлеуден кейін таратылған бастапқы кодты басқару жүйесі Git 2.39 шығарылды. Git - ең танымал, сенімді және жоғары өнімді нұсқаларды басқару жүйелерінің бірі, тармақталу мен біріктіруге негізделген икемді, сызықтық емес әзірлеу мүмкіндіктерін ұсынады. Тарихи тұтастықты және ретроактивті өзгерістерге төзімділікті қамтамасыз ету үшін әрбір коммиттегі алдыңғы тарихтың имплицитті хэштелуі қолданылады, сондай-ақ жеке тегтер мен коммиттердің сандық қолтаңбаларын пайдалануға болады.
Алдыңғы шығарылыммен салыстырғанда, жаңа нұсқада 86 әзірлеушінің қатысуымен дайындалған 483 өзгеріс бар, олардың 31-і жобаға жаңадан келгендер. Негізгі жаңа мүмкіндіктерге мыналар кіреді:
- Коммит тарихынан қысқаша статистиканы көрсететін "git shortlog" командасында енді автор немесе коммиттен басқа өрістер бойынша коммиттерді арнайы топтастыруға арналған "--group" опциясы бар. Мысалы, "Бірлескен автор" өрісінде аталған үлес қосушыларды қоса алғанда, өзгерістер саны туралы ақпараты бар әзірлеушілер тізімін көрсету үшін келесі команданы пайдалануға болады: git shortlog -ns --group=author --group=trailer:co-authored-by
Қысқа журнал шығысын пішімдеу спецификаторларын пайдаланып біріктіруге болады, ал "--group" опциясы қосымша сұрыптау командаларын орындамай күрделі есептерді жасауды әлдеқайда жеңілдетеді. Мысалы, берілген шығарылым үшін әр айда қанша коммит қабылданғанын көрсететін есепті жасау үшін келесіні көрсетуге болады: git shortlog v2.38.0.. --date='format:%Y-%m' --group='%cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Бұрын ұқсас операция sort және uniq утилиталарын пайдалануды қажет ететін: git log v2.38.0.. --date='format:%Y-%m' --format='%cd' | sort | uniq -c
- Репозиторийдегі тармақтармен немесе тегтермен сілтеме жасалмаған қолжетімсіз нысандарды орау үшін жасалған "cruft packs" механизмі кеңейтілді. Қолжетімсіз нысандар қоқыс жиналады, бірақ жарыс жағдайларын болдырмау үшін жойылмас бұрын белгілі бір уақыт ішінде репозиторийде қалады. "cruft packs" механизмі барлық қолжетімсіз нысандарды бір бума файлында сақтауға және әрбір нысан үшін өзгерту уақыттарын ".mtimes" кеңейтімі бар бөлек файлда сақталған бөлек кестеде сақтауға мүмкіндік береді, осылайша олар жалпы өзгерту уақыттарына кедергі келтірмейді.
Қолжетімсіз нысандардың жойылғанға дейін репозиторийде қалу уақыты "--prune=" параметрімен анықталады. «Дегенмен, жою алдындағы кідіріс жарыс жағдайларына байланысты репозиторийдің бұзылуын болдырмаудың тиімді және практикалық тәсілі болғанымен, ол 100% сенімді емес. Зақымдалған репозиторийді қалпына келтіруді жеңілдету үшін жаңа шығарылым жоғалған нысандарды сақтау мүмкіндігін береді. Осы мақсатта «git repack» командасына «--expire-to» опциясы қосылды. Бұл опция барлық жойылған нысандардың сыртқы көшірмесін жасау үшін файлды көрсетуге мүмкіндік береді. Мысалы, соңғы 5 минутта өзгермеген қол жетімсіз нысандарды backup.git файлында сақтау үшін келесі пәрменді пайдалануға болады: git repack --cruft --cruft-expiration=5.minutes.ago -d --expire-to=../backup.git
- "git grep --cached" командасының өнімділігі ssare-checkout функциясын пайдаланатын және ішінара индекстері бар (sparse index) аймақтарда іздеу кезінде айтарлықтай артты (70%-ға дейін). Бұрын "--cached" опциясын көрсеткен кезде алдымен кәдімгі индекс, содан кейін ішінара индекстер ізделетін, бұл үлкен репозиторийлерді іздеу кезінде айтарлықтай кідірістерге әкелетін.
- Орындау жеделдетілді сервер git push операциясы кезінде репозиторийге жаңа нысандарды орналастырмас бұрын олардың қосылымын тексеру. Тексеру кезінде тек жарияланған сілтемелерді ескеруге ауысу арқылы, 7 миллион сілтемесі бар, олардың тек 3%-ы push операциясымен қамтылған сынақ репозиторийінде бұл оңтайландырулар тексеру уақытын 4.5 есеге қысқартты.
- Кодтағы бүтін сандардың асып кетуінен қорғау үшін "git apply" командасы енді өңделген патчтардың максималды өлшемін шектейді. 1 ГБ-тан асатын кез келген патч өлшемі енді қате тудырады.
- Ықтимал осалдықтардан қорғау үшін, h2h3 модулін GIT_TRACE_CURL=1 немесе GIT_CURL_VERBOSE=1 опциясымен HTTP/2 протоколымен бірге пайдаланған кезде орнатылған тақырыптардан қажетсіз ақпаратты тазарту үшін өзгерістер енгізілді.
- Басқа тармаққа символдық сілтеме болып табылатын тармақта тексеру операциясын орындаған кезде, git symbolic-ref HEAD командасы енді символдық сілтеменің атауының орнына мақсатты тармақтың атауын басып шығарады.
- Алдыңғы тармақтың сипаттамасын өңдеу үшін "--edit-description" опциясына ("git branch --edit-description @{-1}") @{-1} аргументін қолдау қосылды.
- Стандартты енгізу ағыны арқылы опциялар тізімін беруге мүмкіндік беретін "git merge-tree --stdin" командасы қосылды.
- Желілік файлдық жүйелерде файлдық жүйедегі өзгерістерді бақылайтын fsmonitor өңдегіші әдепкі бойынша өшірілген.
Ақпарат көзі: opennet.ru
