eliberarea unui sistem distribuit de gestionare a codului sursă . Git este unul dintre cele mai populare, fiabile și puternice sisteme de gestionare a versiunilor, oferind instrumente flexibile pentru dezvoltarea non-lineară, bazate pe ramificare și fuziune a ramurilor. Pentru a asigura integritatea istoriei și rezistența la modificări retroactive, se utilizează o hashare implicită a întregii istorii anterioare în fiecare commit, iar cote și commituri pot fi certificate prin semnături digitale ale dezvoltatorilor.
Comparativ cu ultima versiune, noua versiune include 583 de modificări, pregătite cu contribuția a 84 de dezvoltatori, dintre care 32 au participat pentru prima dată la dezvoltare. :
- Se apropie de stabilizare și pregătire completă funcționalitatea de clonare parțială (partial clones), care permite transferul doar a unei părți din date și lucrul cu o copie incompletă a repository-ului. La clonarea obișnuită din repository, sunt copiate toate datele, inclusiv fiecare versiune a fiecărui fișier din istoricul modificărilor. În cazul repository-urilor foarte mari, copierea datelor duce la o creștere semnificativă a traficului și a spațiului pe disc, chiar dacă dezvoltatorul este interesat doar de un subset de fișiere. Pentru a simplifica obținerea doar a unei părți din arborele de lucru al codului sursă, noul release introduce comanda experimentală „sparse-checkout” și o nouă opțiune „—sparse” pentru comanda „clone”.
Anterior, procesul de clonare selectivă se realiza prin setarea pentru excluderea conținutului inutil și opțiunea „—no-checkout” pentru a dezactiva completarea fișierelor lipsă. După aceea, înainte de a efectua operația checkout, era necesară activarea setării core.sparseCheckout și definirea în fișierul .git/info/sparse-checkout a listei de modele de căi excluse. De exemplu, pentru clonarea fără bloburi și restricționarea extragerii fișierelor din subdirectoare la o adâncime de 2 sau mai mult, se putea executa:
git clone —filter=blob:none —no-checkout /your/repository/here repo
$ cd repo
$ cat > .git/info/sparse-checkout <EOF
/*
!/*
EOF
$ git config core.sparseCheckout 1
$ git checkout .Noua comandă „git sparse-checkout” simplifică considerabil munca și reduce procesul de organizare a lucrului cu un repository incomplet la comenzi:
git clone —filter=blob:none —sparse /your/repository/here repo
git sparse-checkout set /path/to/check/outComanda sparse-checkout permite stabilirea unei liste de căi pentru checkout (set) fără configurarea manuală a .git/info/sparse-checkout, precum și afișarea listei curente de căi (list) și activarea sau dezactivarea checkout-urilor parțiale (enable/disable).
Pentru a optimiza munca cu repository-uri foarte mari și liste de modele, a fost propusă setarea „«, care limitează șabloanele permise (în loc să definească șabloane arbitrare .gitignore, se poate specifica dacă toate căile și toate fișierele dintr-un subdirector dat ar trebui extrase). De exemplu, dacă într-un depozit mare există un director „A/B/C” și toată activitatea este concentrată în subdirectorul „C”, atunci, activând modul sparseCheckoutCone, comanda „git sparse-checkout set A/B/C” va extrage complet conținutul din „C”, dar din „A” și „B” va extrage doar părțile necesare pentru a lucra cu „C”.
- Din documentație („git rebase -h”) au fost eliminate toate referințele la opțiunea „—preserve-merges”, care a fost declarată învechită, iar pentru a muta un set de commit-uri trebuie utilizată „«.
- Pentru a îmbunătăți lizibilitatea mesajelor cu patch-uri trimise pe liste de discuții, a fost adăugată opțiunea „git format-patch —cover-from-description subject”, prin care, când este specificată, primul paragraf din textul descrierii ramurii este utilizat ca subiect al scrisorii însoțitoare pentru setul de patch-uri.
- A fost implementat suport pentru utilizarea comună a comenzii „git apply —3way” și a setării „merge.conflictStyle” („git apply” acum ia în considerare stilul descrierii conflictului din merge.conflictStyle, atunci când este necesară rezolvarea conflictului după încercarea de aplicare a fișierului cu patch la depozit).
- Codul de definire a funcțiilor utilizat în operațiuni precum „git diff/grep —show-function/—function-context” a fost extins cu suport pentru definirea limitelor funcțiilor în programele scrise în limbajul .
- În „git add”, „git commit”, „git reset” și alte comenzi a fost adăugată o nouă opțiune „—pathspec-from-file”, care permite încărcarea unei liste de căi dintr-un fișier sau dintr-un flux de intrare, în locul enumerării acestora în linia de comandă.
- S-a rezolvat problema determinării redenumirilor la nivel de directoare atunci când se fac commit-uri. Determinarea nu a funcționat în cazurile de mutare a conținutului unui subdirector în rădăcina depozitului.
- A fost propusă o implementare inițială a comenzii refăcute „git add -i”, care permite adăugarea conținutului modificat în mod interactiv, rescrisă din Perl în C. O refacere similară este în curs de desfășurare pentru comanda „git add -p”.
- A avut loc o refactorizare a comenzii „git log —graph”, care generează o imagine ASCII a graficului cu istoricul modificărilor în depozit. Refacerea a permis îmbunătățirea și simplificarea semnificativă a ieșirii fără a distorsiona structura istoriei, ceea ce, de exemplu, a rezolvat problema cu ieșirea imaginii dincolo de lățimea liniei terminalului.
- Opțiunea „git log —format=..”, care permite modificarea formatului de ieșire,
a fost extinsă cu suport pentru flagurile „l/L” pentru a afișa doar partea adresei de email specificată înainte de simbolul „@” (de exemplu, util când toți dezvoltatorii au aceeași adresă de email într-un domeniu). - În comanda „git submodule” a fost adăugată subcomanda „set-url”.
- Seturile de teste au fost actualizate ca parte a pregătirii pentru trecerea la
algoritmul de hash SHA-2 în loc de SHA-1.
Sursa: opennet.ro
