vydání distribuovaného systému správy zdrojového kódu . Git je jedním z nejpopulárnějších, spolehlivých a vysoce výkonných systémů pro správu verzí, který nabízí flexibilní nástroje pro nelineární vývoj založené na větvení a sloučení větví. Pro zajištění integrity historie a odolnosti vůči zpětným změnám se používá implicitní hashování celé předchozí historie v každém commitu, a je také možné ověřit digitálními podpisy jednotlivých tagů a commitů.
V porovnání s předchozím vydáním zahrnuje nová verze 745 změn, které připravilo 74 vývojářů, z nichž 18 se zapojilo do vývoje poprvé. :
- Od vydání 1.18 je nový režim přesunu sady commitů „git rebase --rebase-merges“ náhradou za starou možnost „--preserve-merges“, která je nyní označena jako zastaralá. Operace „git rebase“ se používá k nahrazení série commitů novým základním commitem, například k posunutí jednotlivé větve, ve které se vyvíjí nějaká nová funkčnost, do aktuálního stavu master větve, zahrnující opravy přidané po odbočení:
o — o — o (my-feature)
/
o — o — o — o — o (master)
o — o — o (my-feature)
/
o — o — o — o — o (master)
Pro zachování struktury větvení v přesouvané větvi byla dříve použita možnost „--preserve-merges“, která při spuštění v interaktivním režimu (git rebase -i --preserve-merges) umožnila editaci historie commitů, ale nezaručila úplné zachování struktury repozitáře. Nový režim „--rebase-merges“ umožňuje zachovat strukturu změn v přesouvané větvi a zároveň nabízí kompletní sadu interaktivních operací, včetně odstraňování, přeorganizování a přejmenovávání commitů.
Například „--rebase-merges“ přenést commity z jednotlivé větve na novější master větev, přičemž zachová strukturu větvení v přesouvané větvi, a tím provést některé změny v poznámkách k commitům za běhu.
- Byla přidána podpora pro vytvoření nové větve na základě výsledku určení základny sloučení dvou dalších větví (merge base, vazba na společného předka) pomocí konstrukcí „git branch new A…B“ a „git checkout -b new A…B“, kde „A…B“ odkazuje na určení základny sloučení mezi dvěma zadanými commity, podobně jako „git checkout A…B“ posune HEAD na základní commit a „diff A…B“ ukazuje změny mezi commit B a společným commit A předkem.
Například při práci na samostatné větvi my-feature lze tuto navrhovanou funkci využít, když je potřeba začít z jiné větve, například ze stejného místa v master větvi, ze které byla vytažena větev my-feature. Dříve bylo nutné ručně prozkoumat log změn, což způsobilo nepohodlí v případě velké historie změn, poté vykonat „git merge-base master my-feature“ pro vypočítání hash základny sloučení mezi větvemi master a my-feature a vytvořit novou větev vzhledem ke společnému předkovi „git branch my-other-feature hash“. Ve verzi Git 2.22 lze pro vytvoření větve na základě základny sloučení dvou dalších větví použít syntaxi „git branch my-other-feature A…B“;
- Byla přidána možnost „git branch —show-current“ pro zobrazení jména větve získaného při provedení operace checkout;
- Byla přidána možnost „git checkout —no-overlay — dir“, která při provedení operace checkout upraví obsah adresáře dir tak, aby odpovídal stavu master větve. Například, pokud má místní kopie adresáře dir soubor, který chybí v master větvi, bude při provedení „git checkout master — dir“ tento soubor ponechán, ale pokud je uvedena volba „—no-overlay“, bude odstraněn;
- V příkazu „git diff“ byl nasazen univerzální API pro analýzu možností, což umožnilo unifikaci zpracování voleb s jinými git nástroji. Například v „git diff“ jsou nyní pro všechny možnosti dostupné i jejich opozita („—function-context“ a „—no-function-context“);
- Byla přidána možnost filtrování při výstupu „git log“ připojených k commitům rozšířených značek („trailer“ — další informační vlajky, jako je Signed-off-by a Co-authored-by). Je možné filtrovat značky jak podle klíče, tak podle hodnoty, například:
„git log —pretty=»%(trailers:key=Reviewed-by,valueonly)»; - Byl přidán nový mechanismus sledování Trace2, který nabízí flexibilnější a strukturovanější formát výstupu. Trace2 umožňuje sběr telemetrie o prováděných operacích a datech o výkonu pro podrobnější analýzu a ladění (zpracovatel je přiřazen uživatelem, žádná data nejsou odesílána ven);
- Byl učiněn přehlednější zpráva „git bisect“, v níž jsou nyní jasněji vyznačeny problematické commity a zobrazeny shrnující statistiky změn pro každý soubor (na úrovni počtu změněných řádků);
- Byla přepracována heuristika pro určení přejmenování adresářů s cílem vyloučit falešné označování přejmenování. V případě pochybností jsou nyní podobné adresáře označovány jako konfliktní;
- Bylo zajištěno zobrazení upozornění při pokusu o nastavení tagu na jiný tag, což se obvykle dělá chybou a může vést k umístění značky na nesprávný commit (například konstrukce ve stylu „git tag -f -m „updated message“ my-tag1 my-tag2“ povede k vytvoření tagu na starý tag, přičemž vývojář očekával, že nový tag bude umístěn na commit, na který odkazuje starý tag);
- Byla zahrnuta generace pro repozitáře bitových map (disková struktura „reachability bitmaps“), které ukládají data o sadách objektů dostupných pro každý commit a umožňují rychle určit přítomnost základního objektu. Uvedená struktura významně zkracuje dobu provádění operací načítání dat (git fetch).
Zdroj: opennet.ru
