Git 2.41 sistèm kontwòl sous disponib

Apre twa mwa nan devlopman, sistèm kontwòl sous distribiye Git 2.41 te lage. Git se youn nan sistèm kontwòl vèsyon ki pi popilè, serye ak pèfòmans segondè, ki bay zouti devlopman fleksib ki pa lineyè ki baze sou branch ak fizyon. Pou asire entegrite istwa a ak rezistans nan chanjman retwoaktif, yo itilize hashing implicite nan tout istwa anvan an nan chak komèt; li posib tou pou sètifye tag endividyèl ak komèt ak siyati dijital devlopè yo.

Konpare ak lage anvan an, nouvo vèsyon an enkli 542 chanjman, prepare avèk patisipasyon 95 devlopè, nan yo ki 29 te patisipe nan devlopman pou premye fwa. Prensipal inovasyon:

  • Amelyore manyen objè inaccessible ki pa referans nan depo a (pa referans pa branch oswa tag). Pèseptè fatra a efase objè ki pa ka jwenn yo, men rete nan depo a pou yon sèten tan anvan yo efase pou evite kondisyon ras yo. Pou swiv peryòd la nan ensidan objè inaccessible, li nesesè yo tache tag yo ak tan an nan chanjman nan objè menm jan an, ki pa pèmèt estoke yo nan yon sèl fichye pake nan ki tout objè yo gen yon tan chanjman komen. Anvan sa, chak objè inaccessible yo te estoke nan yon dosye separe, ki te mennen nan pwoblèm lè te gen yon gwo kantite objè fre inaccessible ki pa t 'ankò elijib pou efase. Nan nouvo lage a, se mekanis "cruft pack" yo itilize pa default pou anbalaj objè ki pa ka atenn, ki pèmèt ou estoke tout objè ki pa ka atenn nan yon sèl fichye pake, epi done sou tan modifikasyon chak objè yo reflete nan yon tab separe, ki estoke. nan yon fichye ki gen ekstansyon ".mtimes" ak lye lè l sèvi avèk yon fichye endèks ak ekstansyon ".idx".
    Git 2.41 sistèm kontwòl sous disponib
  • Kenbe yon endèks ranvèse sou disk pou dosye pake pèmèt pa default. Lè tès sou depo torvalds/linux la, itilizasyon yon endèks ranvèse te fè li posib pou pi vit operasyon "git push" ki gen anpil resous 1.49 fwa, ak operasyon senp tankou kalkile gwosè yon sèl objè lè l sèvi avèk "git cat- fichye —batch='%(objectsize:disk)' "77 fwa. Dosye (".rev") ki gen yon endèks ranvèse yo pral estoke andedan depo a nan anyè ".git/objects/pack".

    Sonje byen, Git estoke tout done nan fòm objè, ki sitiye nan dosye separe. Pou ogmante efikasite nan travay ak repozitwa a, objè yo mete anplis nan dosye pake, kote enfòmasyon yo prezante nan fòm lan nan yon kouran nan objè ki swiv youn ak lòt (yon fòma menm jan yo itilize lè yo transfere objè ak git fetch la ak git push. kòmandman). Pou chak fichye pake, yo kreye yon fichye endèks (.idx), ki pèmèt ou byen vit detèmine konpanse nan fichye pake kote objè yo estoke lè l sèvi avèk idantifyan objè a.

    Endèks ranvèse ki enkli nan nouvo lage a vize optimize pwosesis pou detèmine idantifyan objè a nan enfòmasyon sou plasman objè a nan dosye pake a. Précédemment, konvèsyon sa yo te fèt sou vole pandan y ap analize fichye pake a epi yo te estoke sèlman nan memwa, sa ki pa te pèmèt endis menm jan yo dwe reyitilize ak fòse endèks la yo dwe pwodwi chak fwa. Operasyon an nan bati yon endèks vini desann nan konstwi yon etalaj de pè objè-pozisyon ak klasman li pa pozisyon, sa ki ka pran yon tan long pou dosye gwo pake.

    Pa egzanp, yon operasyon pou montre sa ki nan objè yo, ki itilize yon endèks dirèk, te 62 fwa pi vit pase yon operasyon pou montre gwosè objè yo, pou ki done pozisyon-a-objè yo pa t endis. Apre yo fin itilize endèks la ranvèse, operasyon sa yo te kòmanse pran apeprè menm tan an. Endèks ranvèse tou pèmèt ou akselere operasyon voye objè lè egzekite chache ak pouse kòmandman pa dirèkteman transfere done ki pare soti nan disk.

    Git 2.41 sistèm kontwòl sous disponib

  • Pwotokòl "asistan kalifikasyon" la, ki itilize pou transfere kalifikasyon lè w ap jwenn aksè nan depo ak aksè limite, te ajoute sipò pou pase antèt WWW-Authenticate ant moun kap okipe kalifikasyon yo ak sèvis kote otantifikasyon an fèt. Sipò pou WWW-Authenticate header pèmèt ou pase paramèt dimansyon OAuth pou yon separasyon plis granulaire nan aksè itilizatè a depo ak delimitasyon dimansyon ki disponib pou demann yo.
  • Te ajoute opsyon fòma "%(ahead-behind:" nan lòd pou-chak-ref la: )", ki pèmèt ou jwenn enfòmasyon imedyatman sou kantite komite ki prezan oswa ki absan nan yon sèten branch, parapò ak yon lòt branch (konbyen yon branch ki dèyè oswa devan yon lòt nan nivo komite). Anvan sa, pou jwenn enfòmasyon sa yo, ou te bezwen kouri de kòmandman separe: "git rev-list —count main..my-feature" pou jwenn kantite commits inik nan branch lan ak "git rev-list -count my-feature". ..main” pou jwenn kantite komèt ki manke yo. Koulye a, kalkil sa yo ka redwi a yon sèl kòmand, ki senplifye ekri nan moun kap okipe yo ak diminye tan ekzekisyon. Pa egzanp, pou montre branch ki pa te fizyone epi evalye si yo dèyè oswa devan branch prensipal la, ou ka itilize yon revètman: $ git for-each-ref —no-merged=origin/HEAD \ —format ='%(refname:short) %(devan-dèyè :orijin/HEAD)' \refs/heads/tb/ | kolòn -t tb/cruft-extra-tips 2 96 tb/for-each-ref—ekskli 16 96 tb/roaring-bitmaps 47 3 olye de script ki te itilize anvan an, ki kouri 17 fwa pi dousman: $ git for-each-ref — format='%(refname:short)' —no-fusioned=origin/HEAD \ refs/heads/tb | pandan li ref do ahead="$(git rev-list -count orijin/HEAD..$ref)" dèyè="$(git rev-list -count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$devan" "$dèyè" fè | kolòn -t tb/cruft-extra-tips 2 96 tb/pou-chak-ref—ekskli 16 96 tb/roaring-bitmaps 47 3
  • Opsyon "-porselèn" la te ajoute nan lòd "git fetch" la, lè yo espesifye, pwodiksyon an pwodwi nan fòma " ", mwens lizib, men pi pratik pou analize nan scripts.
  • Te ajoute anviwònman "fetch.hideRefs", ki pèmèt ou akselere operasyon "git chache" lè w kache kèk nan lyen ki nan repozitwa lokal la nan etap la nan tcheke si sèvè a te voye yon seri objè konplè, ki ekonomize tan pa limite chèk la sèlman nan serveurs kote done yo dirèkteman rekipere. Pa egzanp, lè w ap fè tès sou yon sistèm ak depo ki gen yon gwo kantite lyen ekstèn ki swiv, eksepte tout lyen eksepte sa yo ki adrese sèvè sib la $remote redwi ekzekisyon operasyon git fetch la soti nan 20 minit a 30 segonn. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ chache $remote
  • Kòmand "git fsck" la bay kapasite pou tcheke pou koripsyon, konfòmite checksum, ak kòrèk valè nan bitmaps aksè ak endèks ranvèse.
  • Kòmandman "git clone --local" kounye a montre yon erè lè w ap eseye kopye soti nan yon depo ki gen lyen senbolik andedan $GIT_DIR.

Sous: opennet.ru

Add nouvo kòmantè