programmatūra · 5 min · 11.07.2026

Git 2.55 ļauj āķus definēt konfigurācijā un palaist paralēli

Git komanda 29. jūnijā izlaida versiju 2.55, un ar to noslēdzas pārmaiņa, kas iesākās aprīlī ar 2.54: repozitorija āķus (hooks) vairs nav jāglabā tikai kā izpildāmus skriptus mapē .git/hooks. Tos tagad var aprakstīt tieši Git konfigurācijā, un vienam notikumam piesaistīt vairākus. Versija 2.55 pievieno vēl vienu soli — šos konfigurācijas āķus var palaist paralēli.

Āķis Git terminoloģijā ir komanda, kas nostrādā konkrētā brīdī: pirms komita (pre-commit), pirms nosūtīšanas uz attālo repozitoriju (pre-push), pēc komita ziņas sagatavošanas un tā tālāk. Līdz šim katrs projekts glabāja savus āķus vietējā mapē, un tie neceļoja līdzi klonēšanai. Ja komandai vajadzēja vienu un to pašu linteri katrā repozitorijā, skripts bija jākopē manuāli katrā no tiem.

Kā izskatās konfigurācijas āķis

Āķi apraksta ar sadaļu [hook]. Katram ieraksta nosaukumu, notikumu un komandu, piemēram:

  • [hook "linter"]
  • event = pre-commit
  • command = ~/bin/linter --cpp20

Atslēga hook.<nosaukums>.event pasaka, kurā brīdī āķis nostrādā, bet hook.<nosaukums>.command — ko izpildīt. Vienam notikumam var būt vairāki āķi ar dažādiem nosaukumiem, un tie nostrādā cits pēc cita konfigurācijas secībā. Blakus iepriekšējam linterim var pierakstīt otru āķi ar nosaukumu no-leaks, kas tam pašam pre-commit notikumam palaiž noplūžu detektoru ~/bin/leak-detector.

Vecais mehānisms nekur nepazūd. Skripti mapē .git/hooks joprojām darbojas, un tie nostrādā pēdējie — pēc visiem konfigurācijā aprakstītajiem āķiem. Tas nozīmē, ka esošos projektus nekas nesalauž.

Kāpēc tas ir ērtāk par skriptiem

Konfigurāciju Git lasa trīs līmeņos, un āķus var likt jebkurā no tiem. Sistēmas līmenis (--system) attiecas uz visiem lietotājiem un visiem repozitorijiem šajā datorā. Globālais līmenis (--global) — uz vienu lietotāju visos viņa repozitorijos. Vietējais līmenis (--local) — uz vienu konkrētu repozitoriju. Administrators var sistēmas konfigurācijā uzlikt drošības pārbaudi, kas nostrādās katrā komitā, un izstrādātājam nekas nav jākopē.

Konkrētu āķi var izslēgt, neizdzēšot tā aprakstu. Atslēga hook.<nosaukums>.enabled = false to atslēdz — noderīgi, kad sistēmas āķis vienā projektā traucē. Komanda git hook list parāda visus konfigurētos āķus un to izcelsmi, tā ka var redzēt, kas nāk no sistēmas, kas no lietotāja un kas no paša repozitorija.

Skripti mapē .git/hooks paliek pieejami, bet to pašu āķi tagad var aprakstīt vienuviet un attiecināt uz visiem repozitorijiem uzreiz.

Kas mainās komandām, kuras jau lieto ārējus rīkus

Tieši tāpēc, ka Git āķi nekad neceļoja līdzi klonēšanai, radās atsevišķi rīki to pārvaldībai. JavaScript projektos daudzi lieto Husky, Python vidē — pre-commit ietvaru, kas āķu sarakstu tur versiju kontrolē esošā YAML failā un pats parūpējas par to uzstādīšanu pēc klonēšanas. Šie rīki risināja to pašu problēmu, ko tagad daļēji atrisina pats Git.

Konfigurācijas āķi tos neaizstāj pilnībā. Ietvari joprojām pārvalda linteru versijas, vidi un instalāciju, ko Git nedara. Bet vienkāršiem gadījumiem — viens skripts, kas jāizpilda visos komandas repozitorijos — vairs nav jāpievelk ārēja atkarība. Pietiek ar ierakstu sistēmas vai globālajā konfigurācijā.

Paralēlā izpilde versijā 2.55

Versijā 2.54 viena notikuma āķi vienmēr strādāja pa vienam, secīgi. Versija 2.55 pievieno iespēju tos palaist paralēli, bet tikai pēc pieprasījuma, lai neko nesalauztu tiem, kuri uz secīgu izpildi paļaujas. Konkrētam āķim pieliek parallel = true, lai tas drīkstētu strādāt vienlaikus ar citiem, un hook.jobs nosaka, cik daudz palaist reizē — līdzīgi kā fetch.parallel pie datu ievilkšanas.

Vērtība -1 pie jobs izmanto visus pieejamos procesora kodolus, un skaitu var norādīt arī no komandrindas ar git hook run -j N. Daži notikumi paralēli nestrādā drošības apsvērumu dēļ. Piemēram, pre-commit un prepare-commit-msg koplieto komita ziņas buferi, tāpēc tos paralēli palaist nedrīkst — Git tos tur secīgus arī tad, ja iesledz paralēlismu.

Ko ņemt vērā pirms pārkārtošanas

Konfigurācijas āķi ir jaunums, tāpēc uz tiem paļauties var tikai vidēs, kur visiem ir vismaz Git 2.54. Vecākas versijas šo sadaļu vienkārši ignorēs, un āķis nenostrādās — par to jāpārliecinās, pirms sistēmas līmenī uzliek kaut ko, no kā atkarīga drošība. Migrācija nav obligāta: vecos skriptus var atstāt, kur tie ir, un jaunos āķus pievienot pakāpeniski, jo abi mehānismi strādā līdzās.

Āķis izpilda patvaļīgu komandu, tāpēc ieraksts sistēmas konfigurācijā ir uzticēšanās lēmums — kurš to raksta, tas var palaist jebko katrā komitā. Kopīgotā konfigurācijā tā ir gan ērtība, gan atbildība, un to der paturēt prātā, pārceļot āķus no atsevišķiem projektiem uz centrālu vietu.

Sīkāku aprakstu par āķu darbību un konfigurācijas atslēgām publicēja gan GitHub emuārs par 2.54, gan apskats par 2.55. Papildus āķiem 2.55 ievieš arī fsmonitor atbalstu Linux caur inotify, komandu git history fixup izmaiņu piestiprināšanai vecākam komitam un ātrāku bitkaršu ģenerēšanu lielos repozitorijos.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie