Frigivelse af det distribuerede kildekontrolsystem Git 2.31

Det distribuerede kildekontrolsystem Git 2.31 er nu tilgængeligt. Git er et af de mest populære, pålidelige og højtydende versionskontrolsystemer, der giver fleksible ikke-lineære udviklingsværktøjer baseret på forgrening og sammensmeltning. For at sikre historiens integritet og modstand mod tilbagevirkende ændringer, anvendes implicit hashing af hele den tidligere historie i hver commit; det er også muligt at certificere individuelle tags og commits med digitale signaturer fra udviklerne.

Sammenlignet med den tidligere udgivelse indeholdt den nye version 679 ændringer, udarbejdet med deltagelse af 85 udviklere, hvoraf 23 deltog i udviklingen for første gang. Vigtigste innovationer:

  • Tilføjet kommandoen "git maintenance", som giver dig mulighed for at udføre periodisk arbejde på systemer, der ikke understøtter cron. Ved at bruge en ny kommando kan du f.eks. sørge for, at repository packaging-processen kører med jævne mellemrum, så du ikke skal vente, indtil repository er låst, når pakning automatisk udføres, mens forskellige kommandoer køres. Kommandoen "git maintenance" giver dig mulighed for at udføre optimeringer og operationer for at opretholde den optimale struktur af depotet i baggrunden uden at blokere den interaktive session - en gang i timen arbejdes der på proaktivt at downloade friske objekter fra fjernlageret og opdatere fil med commit-grafen, og processen med at pakke depotet starter hver nat.
  • Tilføjet understøttelse for at opretholde et omvendt indeks (revindex) på disken til pakkefiler. Husk at Git gemmer alle data i form af objekter, som er placeret i separate filer. For at øge effektiviteten ved at arbejde med depotet placeres objekter desuden i pakkefiler, hvori information præsenteres i form af en strøm af objekter, der følger efter hinanden (et lignende format bruges ved overførsel af objekter med git fetch og git push kommandoer). For hver pakkefil oprettes en indeksfil (.idx), som giver dig mulighed for meget hurtigt at bestemme offset i pakkefilen, hvor det givne objekt er gemt ved hjælp af objektidentifikatoren. Introduceret i Git 2.31, er det omvendte indeks (.rev) rettet mod at optimere processen med at bestemme en objektidentifikator ud fra information om placeringen af ​​et objekt i en pakkefil.

    Tidligere blev en sådan konvertering udført på flugt, mens pakkefilen blev analyseret og blev kun gemt i hukommelsen, hvilket ikke tillod lignende indekser at blive genbrugt og tvang indekset til at blive genereret hver gang. Opbygningen af ​​et indeks kommer ned til at konstruere en række objekt-position-par og sortere det efter position, hvilket kan tage lang tid for store pakkefiler.

    For eksempel var en operation for at vise indholdet af objekter, som bruger et direkte indeks, 62 gange hurtigere end en operation til at vise størrelsen af ​​objekter, for hvilke position-til-objekt-dataene ikke blev indekseret. Efter at have brugt det omvendte indeks begyndte disse operationer at tage omtrent samme tid. Omvendte indekser giver dig også mulighed for at fremskynde objektafsendelsesoperationer, når du udfører hente- og push-kommandoer ved direkte at overføre færdige data fra disken. Som standard oprettes omvendte indekser ikke; for at generere dem skal du aktivere indstillingen "git config pack.writeReverseIndex true" og derefter pakke repository med kommandoen "git repack -Ad".

  • Tilføjede ydeevneoptimeringer baseret på udseendet i commit-graf-filformatet, brugt til at optimere adgangen til information om commits, nye data om commit-generationsnummeret, som kan bruges til at fremskynde yderligere operationer med commits.
  • Tilføjede muligheder for at omdefinere navnet på hovedgrenen, der som standard bruges i nye repositories (init.defaultBranch indstilling). Når du tilgår eksterne depoter, forsøger git at tjekke den gren, som HEAD peger på, dvs. hvis den eksterne server bruger "main"-grenen som standard, så vil "git clone"-operationen forsøge at tjekke "main" ud lokalt. Git 2.31 understøtter nu denne type checkout for tomme lagre. For eksempel, når du kloner et nyt lager lokalt, før du tilføjer de første patches til det, vil den lokale kopi nu indeholde standardopstrømsnavnet indstillet på den eksterne server.
  • Tilføjet en --disk-brug mulighed til "git rev-list" kommandoen for at give en oversigt over størrelsen af ​​objekter.
  • I forventning om den kommende ændring af flette-backend er omdøbningsdetektion blevet væsentligt optimeret.
  • Understøttelse af det ældre PCRE1 regulære udtryksbibliotek er afbrudt.
  • Det er muligt kraftigt at forbyde brugen af ​​forkortede links, uanset hashing-algoritmen. Forbuddet aktiveres ved at tildele værdien "nej" til parameteren core.abbrev.
  • Tilføjet "--path-format=(absolute|relative)" mulighed til "git rev-parse" kommandoen for eksplicit at angive, om relative eller absolutte stier skal udlæses.
  • Bash-fuldførelsesscripts gør det nemt at tilføje færdiggørelsesregler for dine egne "git"-underkommandoer.
  • Tilføjet en --stdin-indstilling til "git bundle"-kommandoen for at læse referencer fra standardinputstrømmen.
  • En ny mulighed "--diff-merges=" er blevet tilføjet til kommandoen "git log".
  • Tilføjet "--deduplicatecan" mulighed til "git ls-files" kommandoen for at eliminere duplikat output.
  • Tilføjet nye masker for at udelukke en række commits - "^!" og "^-".
  • Tilføjede "--left-only" og "--right-only" muligheder til "git range-diff" kommandoen for kun at vise den ene side af det område, der sammenlignes.
  • Tilføjede --skip-to=" og "--rotate-to=" muligheder til "git diff" og "git log" kommandoerne for at springe over eller flytte til slutningen af ​​de indledende stier.
  • Tilføjet "--skip-to=" mulighed til "git difftool" kommandoen for at genoptage en afbrudt session fra en vilkårlig sti.
  • Code-of-conduct, som definerer de grundlæggende principper for løsning af konfliktsituationer mellem udviklere, er blevet opdateret til version 2.0 (tidligere blev version 1.4 brugt).

    Kilde: opennet.ru

Tilføj en kommentar