Git
Chapters ▾ 2nd Edition

8.3 Prilagoditev Gita - Kljuke Git

Kljuke Git

Kot mnogi drugi sistemi nadzora različic ima Git način zagona skriptov po meri, ko se zgodijo določene pomembne akcije. Na voljo sta dve skupini teh kljuk: tiste na strani odjemalca in tiste na strani strežnika. Kljuke na strani odjemalca se sprožijo z operacijami, kot sta potrjevanje in združevanje, medtem ko so kljuke strežniške strani gnane na operacijah omrežja, kot je prejemanje potisnjenih potrditev. Te kljuke lahko uporabite iz najrazličnejših razlogov.

Namestitev kljuke

Vse kljuke so shranjene v poddirektoriju hooks direktorija Git. V večini projektov je to .git/hooks. Ko inicializirate nov repozitorij z git init, Git napolni mapo kljuk z nekaj primeri skriptov, ki so sami po sebi uporabni, vendar dokumentirajo tudi vhodne vrednosti vsakega skripta. Vsi primeri so napisani kot lupinski skripti, z nekaj Perla, vendar bodo pravilno poimenovani izvršljivi skripti delovali enako dobro — lahko jih pišete v Rubyju, Pythonu ali katerem koli drugem jeziku, s katerim se spoznate. Če želite uporabiti prednastavljene skripte kljuk, jih morate preimenovati; vsa njihova imena datotek se končajo s .sample.

Da omogočite skript kljuke, v poddirektorij hooks vašega direktorija .git vstavite ustrezno poimenovano in izvršljivo datoteko (brez kakršne koli datotečne pripone). Od tega trenutka naprej naj bi bila poklicana. Tukaj bomo predstavili večino najpomembnejših imen datotek kljuk.

Kljuke na strani odjemalca

Na strani odjemalca obstaja veliko kljuk. Ta razdelek jih razdeli na kljuke za potrjevanje poteka dela, skripte za potek dela z e-pošto in na vse druge.

Opomba

Pomembno je opozoriti, da se kljuke na strani odjemalca ne kopirajo, ko klonirate repozitorij. Če je vaš cilj s temi skripti uveljaviti pravilnik, boste to verjetno želeli storiti na strežniški strani; glejte razdelek Primer pravilnika, ki ga uveljavlja Git.

Kljuke za potek dela s potrjevanjem

Prve štiri kljuke imajo opravka s procesom potrjevanja.

Kljuka pre-commit se izvede prva, preden vnesete sporočilo potrditve. Uporablja se za pregled posnetka, ki bo potrjen, da preverite, ali ste kaj pozabili, da zagotovite, ali se testi izvajajo, ali preverite karkoli, kar morate preveriti v kodi. Izstop iz te kljuke z vrednostjo različno od nič prekine potrditev, čeprav jo lahko obvozite z git commit --no-verify. Lahko naredite stvari, kot so preverjanje sloga kode (zaženete lint ali kaj podobnega), preverjanje zaostalih praznih znakov (privzeta kljuka počne točno to) ali preverjanje ustrezne dokumentacije na novih metodah.

Kljuka prepare-commit-msg se izvede pred zagonom urejevalnika sporočil o potrditvi, vendar po ustvarjanju privzetega sporočila. Omogoča vam urejanje privzetega sporočila, preden ga vidi avtor potrditve. Ta kljuka sprejme nekaj parametrov: pot do datoteke, ki vsebuje sporočilo o potrditvi do sedaj, vrsto potrditve in SHA-1 potrditve, če gre za spremenjeno potrditev. Ta kljuka ponavadi ni uporabna za običajne potrditve; namesto tega je dobra za potrditve, kjer je privzeto sporočilo samodejno ustvarjeno, kot so predložena sporočila o potrditvi, potrditve združitev, stisnjene potrditve in spremenjene potrditve. Uporabite jo lahko v povezavi s predlogo za potrditve, da vstavite informacije programsko.

Kljuka commit-msg sprejme en parameter, ki je ponovno pot do začasne datoteke, ki vsebuje sporočilo o potrditvi, ki ga je napisal razvijalec. Če se ta skript zaključi z izhodom različnim od nič, Git prekine postopek potrditve, zato ga lahko uporabite za preverjanje stanja projekta ali sporočila potrditve, preden dovolite, da gre potrditev skozi. V zadnjem delu tega poglavja bomo predstavili uporabo te kljuke za preverjanje, ali je vaše sporočilo potrditve skladno z zahtevanim vzorcem.

Po celotnem postopku oddaje se zažene kljuka post-commit. Ne sprejme nobenih parametrov, vendar lahko zadnjo potrditev enostavno dobite tako, da zaženete git log -1 HEAD. Ta skript se običajno uporablja za obvestila ali kaj podobnega.

Kljuke potekov dela z e-pošto

Za potek dela z e-pošto lahko nastavite tri kljuke. Vse se kličejo z ukazom git am, zato lahko v svojem poteku dela varno preskočite na naslednji razdelek, če tega ukaza ne uporabljate. Če sprejemate popravke po e-pošti, ki jih pripravi git format-patch, vam lahko nekatere od teh kljuk koristijo.

Prva kljuka, ki se zažene, je applypatch-msg. Sprejme en argument: ime začasne datoteke, ki vsebuje predlagano sporočilo potrditve. Če se ta skript zaključi z neničelnim izhodom, Git prekliče programski popravek. Uporabite ga lahko, da se prepričate, da je sporočilo potrditve pravilno oblikovano, ali pa sporočilo normalizirate tako, da skript uredi sporočilo na mestu.

Naslednja kljuka, ki se zažene pri uporabi popravkov z ukazom git am, je pre-applypatch. Konfuzno je, ker se zažene po uporabi popravka, vendar preden se ustvari potrditev, zato jo lahko uporabite za pregled posnetka pred izdelavo potrditve. S tem skriptom lahko zaženete teste, ali kako drugače pregledate delovno drevo. Če kaj manjka, ali testi niso uspešni, izhod z neničelno vrednostjo prekliče skript git am, ne da bi se potrditev popravka izvedla.

Zadnja kljuka, ki se zažene med operacijo git am, je post-applypatch, ki se zažene po tem, ko se izvede potrditev. Uporabite jo lahko za obveščanje skupine ali avtorja popravka, ki ste ga povlekli. S tem skriptom ne morete ustaviti procesa popravljanja.

Ostale kljuke odjemalca

Kljuka pre-rebase se izvede pred ponovnim baziranjem česarkoli in proces lahko zaustavi z neničelnim izhodom. To kljuko lahko uporabite, da prepoveste ponovno baziranje katerih koli potrditev, ki so že bile potisnjene. Primer kljuke pre-rebase, ki jo namesti Git, naredi to, čeprav deluje pod nekaterimi predpostavkami, ki se morda ne ujemajo z vašim potekom dela.

Kljuka post-rewrite se izvaja s strani ukazov, ki nadomestijo potrditve, kot so git commit --amend in git rebase (vendar ne pa z git filter-branch). Njen edini argument je ukaz, ki je sprožil ponovno pisanje, in prejme seznam ponovnih pisanj prek stdin. Ta kljuka ima veliko enakih uporab, kot jih imata kljuki post-checkout in post-merge.

Po uspešnem izvajanju git checkout se izvede kljuka post-checkout; lahko jo uporabite, da pravilno nastavite delovni imenik za okolje svojega projekta. To lahko pomeni premikanje velikih binarnih datotek, ki jih ne želite upravljati z nadzorom različic, avtomatsko generiranje dokumentacije, ali kaj podobnega.

Kljuka post-merge se izvede po uspešnem ukazu merge. Uporabite jo lahko za obnovitev podatkov v delovnem drevesu, ki jim Git ne more slediti, kot so podatki o dovoljenjih. Ta kljuka lahko prav tako preveri prisotnost datotek izven nadzora Git, ki jih želite kopirati, ko se spremeni delovno drevo.

Kljuka pre-push se izvede med git push po posodobitvi oddaljenih referenc, vendar pred prenosom kakršnih koli objektov. Prek stdin sprejme parametre, kot so ime in lokacija oddaljenega mesta ter seznam referenc, ki bodo posodobljene. Uporabite jo lahko za preverjanje sklopa posodobitev referenc, preden pride do potiska (neničelni izhod bo prekinil potisk).

Git občasno izvaja sproščaje pomnilnika (angl. garbage collection) kot del svojega normalnega delovanja z ukazom git gc --auto. Kljuka pre-auto-gc se sproži tik pred sproščanjem pomnilnika in jo lahko uporabite, da vas obvesti, da se to dogaja, ali pa da prekličete zbiranje, če takrat ni primeren čas.

Kljuke strežniške strani

Poleg kljuk na strani odjemalca lahko kot skrbnik sistema uporabite tudi nekaj pomembnih strežniških kljuk, da uveljavite skoraj vsako vrsto pravilnika za svoj projekt. Ti skripti se izvajajo pred in po potiskanju na strežnik. Pred-kljuke lahko kadar koli izstopijo z neničelno vrednostjo, da zavrnete potiskanje in pošljete sporočilo o napaki nazaj na odjemalca; lahko nastavite pravilnik potiskanja, ki je tako zapleten, kot želite.

pre-receive

Prvi skript, ki se izvede pri obravnavi potiska od odjemalca, je pre-receive. Iz stdin prejme seznam referenc, ki se potisnejo; če izstopi z neničelno vrednostjo, ni sprejeta nobena od njih. To kljuko lahko uporabite za stvari, kot so zagotovitev, da nobena od posodobljenih referenc ni hitro previta naprej, ali pa za upravljanje dostopa do vseh referenc in datotek, ki se spreminjajo s potiskom.

update

Skript update je zelo podoben skriptu pre-receive, razen da se za vsako vejo, ki se jo poskuša posodobiti, izvede enkrat. Če tisti, ki potiska, skuša potiskati na več vej, se pre-receive izvede le enkrat, medtem ko se update izvede enkrat za vsako vejo, na katero se potiska. Namesto branja iz stdin, ta skript vzame tri argumente: ime reference (veja), SHA-1, na katerega se je referenca nanašala pred potiskom, in SHA-1, ki ga uporabnik poskuša potisniti. Če skript update izstopi z neničelno vrednostjo, je zavrnjena samo ta referenca; druge reference se še vedno lahko posodobijo.

post-receive

Kljuka post-receive se izvede po celotnem procesu in jo lahko uporabite za posodobitev drugih storitev ali za obveščanje uporabnikov. Prejme iste podatke iz stdin kot kljuka pre-receive. Primeri vključujejo pošiljanje e-pošte na seznam, obveščanje o stalni integraciji, ali posodobitev sistema za sledenje karticam — lahko celo razčlenite sporočila potrditev, da preverite, ali je treba odpreti, spremeniti ali zapreti katero od kartic. Ta skript ne more ustaviti postopka potiska, vendar se odjemalec ne prekine, dokler ni končan, zato bodite previdni, če poskušate narediti nekaj, kar bi trajalo dolgo časa.

Namig

Če pišete skript/kljuko, ki jo bodo morali drugi prebrati, raje uporabite dolge različice zastavic ukazne vrstice; čez šest mesecev od sedaj nam boste hvaležni.

scroll-to-top