Достапен е систем за контрола на изворот Git 2.41

По три месеци развој, објавен е системот за контрола на дистрибуирани извори Git 2.41. Git е еден од најпопуларните, сигурни и со високи перформанси системи за контрола на верзии, кој обезбедува флексибилни нелинеарни развојни алатки засновани на разгранување и спојување. За да се обезбеди интегритет на историјата и отпорност на ретроактивни промени, имплицитно хаширање на целата претходна историја се користи во секое извршување; исто така е можно да се сертифицираат поединечни ознаки и обврски со дигитални потписи на програмерите.

Во споредба со претходното издание, новата верзија вклучуваше 542 промени, подготвени со учество на 95 програмери, од кои 29 учествуваа во развојот за прв пат. Главните иновации:

  • Подобрено ракување со недостапни објекти кои не се референцирани во складиштето (не се референцирани со гранки или ознаки). Недостапните предмети се бришат од собирачот на ѓубре, но остануваат во складиштето одредено време пред да се избришат за да се избегнат услови за трка. За да се следи периодот на појава на недостапни објекти, неопходно е да се прикачат ознаки на нив со времето на промена на слични објекти, што не дозволува нивно складирање во еден пакет-датотека во која сите објекти имаат заедничко време за промена. Претходно, секој недостапен објект беше зачуван во посебна датотека, што доведе до проблеми кога имаше голем број свежи недостапни објекти кои сè уште не беа подобни за бришење. Во новото издание, механизмот „cruft packs“ стандардно се користи за пакување недостижни објекти, што ви овозможува да ги зачувате сите недостапни објекти во една датотека пакет, а податоците за времето на измена на секој објект се рефлектираат во посебна табела, складирана во датотека со наставка „.mtimes“ и поврзана со помош на индексна датотека со наставката „.idx“.
    Достапен е систем за контрола на изворот Git 2.41
  • Одржувањето обратен индекс на дискот за пакет-датотеки е стандардно овозможено. При тестирање на складиштето torvalds/linux, употребата на обратен индекс овозможи да се забрзаат операциите „git push“ интензивни ресурси за 1.49 пати и едноставни операции како што се пресметување на големината на еден објект со помош на „git cat- file —batch='%(objectsize:disk)' "77 пати. Датотеките („rev“) со обратен индекс ќе се чуваат внатре во складиштето во директориумот „.git/objects/pack“.

    Потсетиме дека Git ги складира сите податоци во форма на објекти, кои се наоѓаат во посебни датотеки. За да се зголеми ефикасноста на работата со складиштето, предметите дополнително се ставаат во пакет-датотеки, во кои информациите се претставени во форма на проток на објекти кои се следат еден по друг (сличен формат се користи при пренос на објекти со git fetch и git push команди). За секоја датотека пакет, се креира индексна датотека (.idx), која ви овозможува многу брзо да го одредите поместувањето во пакет-датотеката во која е зачуван дадениот објект користејќи го идентификаторот на објектот.

    Обратниот индекс вклучен во новото издание е насочен кон оптимизирање на процесот на одредување на идентификаторот на објектот од информациите за сместувањето на објектот во датотеката на пакетот. Претходно, таквата конверзија се вршеше на лет додека се парсираше датотеката на пакетот и се чуваше само во меморијата, што не дозволуваше повторно да се користат слични индекси и го принудуваше индексот да се генерира секој пат. Операцијата на градење индекс се сведува на конструирање низа од парови објект-позиција и нивно сортирање по позиција, што може да потрае долго време за големи пакет-датотеки.

    На пример, операцијата за прикажување на содржината на објектите, која користи директен индекс, беше 62 пати побрза од операцијата за прикажување на големината на објектите, за кои податоците од позиција до објект не беа индексирани. По користењето на обратниот индекс, овие операции почнаа да траат приближно исто време. Индексите за обратна страна, исто така, ви овозможуваат да ги забрзате операциите за испраќање објекти при извршување на наредбите за преземање и туркање со директно пренесување на готови податоци од дискот.

    Достапен е систем за контрола на изворот Git 2.41

  • Протоколот „помошник за акредитиви“, кој се користи за пренос на акредитиви при пристап до складишта со ограничен пристап, додаде поддршка за пренесување заглавија WWW-Authenticate помеѓу управувачот со акредитиви и услугата во која се врши автентикацијата. Поддршката за насловот WWW-Authenticate ви овозможува да ги пренесете параметрите на опсегот на OAuth за погрануларна поделба на корисничкиот пристап до складиштата и разграничување на опсегот достапни за барања.
  • Додадена е опцијата за форматирање „%(напред-зад:“ на командата for-each-ref: )“, што ви овозможува веднаш да добиете информации за бројот на заложби присутни или отсутни во одредена гранка, во однос на друга гранка (колку една гранка е зад или пред друга на ниво на заложба). Претходно, за да добиете такви информации, требаше да извршите две посебни команди: „git rev-list —count main..my-feature“ за да го добиете бројот на заложби единствен за гранката и „git rev-list —count my-feature ..main“ за да се добие бројот што недостасуваат обврзници. Сега таквите пресметки може да се сведат на една команда, што го поедноставува пишувањето на ракувачите и го намалува времето на извршување. На пример, за да ги прикажете гранките што не се споени и да оцените дали се зад или пред главната гранка, можете да користите еднослоен: $ git for-each-ref —no-merged=origin/HEAD \ —формат ='%(рефиме:кратко) %(напред-зад :origin/HEAD)' \refs/heads/tb/ | колона -t tb/cruft-extra-tips 2 96 tb/for-each-ref—исклучи 16 96 tb/roaring-bitmaps 47 3 наместо претходно користената скрипта, која работи 17 пати побавно: $ git за-секој-ref — формат='%(рефиме:кратко)' —no-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead="$(git rev-list -count origin/HEAD..$ref)"back="$(git rev-list -count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" завршено | колона -t tb/cruft-extra-tips 2 96 tb/for-eveach-ref-исклучи 16 96 tb/грчки-битни мапи 47 3
  • Опцијата „-порцелан“ е додадена на командата „git fetch“, кога е наведено, излезот се генерира во формат „ “, помалку читлив, но попогоден за парсирање во скрипти.
  • Додадена е поставката „fetch.hideRefs“, која ви овозможува да ги забрзате операциите „git fetch“ со криење на некои од врските во локалното складиште во фазата на проверка дали серверот испратил целосен сет на објекти, што заштедува време со ограничување на проверката само на сервери од кои директно се преземаат податоците. На пример, кога се извршува тест на систем со складишта што содржат голем број следени надворешни врски, исклучувајќи ги сите врски освен оние кои се адресирани до целниот сервер $remote, го намалува извршувањето на операцијата за преземање git од 20 минути на 30 секунди. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Командата „git fsck“ обезбедува можност за проверка на корупција, усогласеност на контролната сума и исправност на вредностите во битмапите за пристапност и обратните индекси.
  • Командата „git clone --local“ сега прикажува грешка при обидот за копирање од складиште што содржи символи во $GIT_DIR.

Извор: opennet.ru

Додадете коментар