-
1. Začetek
- 1.1 O nadzoru različic
- 1.2 Kratka zgodovina Gita
- 1.3 Kaj je Git?
- 1.4 Ukazna vrstica
- 1.5 Namestitev Gita
- 1.6 Prva nastavitev Gita
- 1.7 Pridobivanje pomoči
- 1.8 Povzetek
-
2. Osnove Git
- 2.1 Pridobivanje repozitorija Git
- 2.2 Snemanje sprememb v repozitorij
- 2.3 Pregled zgodovine potrditev
- 2.4 Razveljavljanje stvari
- 2.5 Delo z daljavami
- 2.6 Označevanje
- 2.7 Aliasi Git
- 2.8 Povzetek
-
3. Veje Git
- 3.1 Veje na kratko
- 3.2 Osnove vej in združevanja
- 3.3 Upravljanje vej
- 3.4 Poteki dela z vejami
- 3.5 Oddaljene veje
- 3.6 Ponovno baziranje
- 3.7 Povzetek
-
4. Git na strežniku
- 4.1 Protokoli
- 4.2 Pridobitev Gita na strežniku
- 4.3 Generiranje vaših javnih ključev SSH
- 4.4 Nastavitev strežnika
- 4.5 Prikriti proces Git
- 4.6 Pametni HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Možnosti gostovanja pri tretjih ponudnikih
- 4.10 Povzetek
-
5. Porazdeljeni Git
- 5.1 Porazdeljeni poteki dela
- 5.2 Prispevek k projektu
- 5.3 Vzdrževanje projekta
- 5.4 Povzetek
-
6. GitHub
-
7. Orodja Git
- 7.1 Izbira revizije
- 7.2 Interaktivno pripravljanje
- 7.3 Shranjevanje na varno (angl. stashing) in čiščenje
- 7.4 Podpisovanje vašega dela
- 7.5 Iskanje
- 7.6 Prepisovanje zgodovine
- 7.7 Demistifikacija ponastavitve
- 7.8 Napredno združevanje
- 7.9 Rerere
- 7.10 Razhroščevanje z Gitom
- 7.11 Podmoduli
- 7.12 Povezovanje v pakete
- 7.13 Zamenjava
- 7.14 Shramba poverilnic
- 7.15 Povzetek
-
8. Prilagoditev Gita
- 8.1 Konfiguracija Git
- 8.2 Atributi Git
- 8.3 Kljuke Git
- 8.4 Primer pravilnika, ki ga uveljavlja Git
- 8.5 Povzetek
-
9. Git in ostali sistemi
- 9.1 Git kot odjemalec
- 9.2 Migracija na Git
- 9.3 Povzetek
-
10. Notranjost Gita
- 10.1 Napeljava in keramika
- 10.2 Objekti Git
- 10.3 Reference Git
- 10.4 Packfiles (datoteke zmanjšanih podatkov)
- 10.5 Refspec
- 10.6 Protokoli prenosa
- 10.7 Vzdrževanje in obnovitev podatkov
- 10.8 Spremenljivke okolja
- 10.9 Povzetek
-
A1. Dodatek A: Git v drugih okoljih
- A1.1 Grafični vmesniki
- A1.2 Git v Visual Studio
- A1.3 Git v Visual Studio Code
- A1.4 Git v IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git v Sublime Text
- A1.6 Git v Bashu
- A1.7 Git v Zsh
- A1.8 Git v Powershellu
- A1.9 Povzetek
-
A2. Dodatek B: Vdelava Gita v vašo aplikacijo
- A2.1 Git v ukazni vrstici
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Dodatek C: Ukazi Git
- A3.1 Nastavitev in konfiguracija
- A3.2 Pridobivanje in ustvarjanje projektov
- A3.3 Osnove posnetkov
- A3.4 Veje in združevanje
- A3.5 Deljenje in posodabljanje projektov
- A3.6 Pregled in primerjava
- A3.7 Razhroščevanje
- A3.8 Popravljanje
- A3.9 E-pošta
- A3.10 Zunanji sistemi
- A3.11 Administracija
- A3.12 Orodja za sisteme napeljave
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. |