Razvoj programske opreme je skupna naloga. Kot programski inženir morate svoje delo deliti z drugimi. Toda skupna raba kode in sodelovanje se lahko zapleteta. Težko je spremljati različne spremembe, ki se zgodijo v življenjskem ciklu programske opreme. Tako se razvojne skupine zanašajo na orodja za nadzor različic, ki pomagajo pri procesu sodelovanja s programsko opremo. Git je eno najvidnejših orodij za nadzor različic v industriji programske opreme.
Namig: V tej vadnici boste izvedeli, kako uporabljati osnove Gita. Vsak odsek se konča z nekaj vprašanji. Vprašanja lahko preberete, preden začnete brati poglavje. Tako boste lažje razumeli in bili pozorni na pomembne točke.
Uživajte v učenju Git!
Git: Kratek pregled
Git je porazdeljeni sistem za nadzor različic. Spremlja vse spremembe datotek in map. Tako lažje shranite nedokončano delo. Če je težava, lahko preprosto preverite starejšo različico datoteke ali mape. Če je potrebno, lahko celotno kodno bazo povrnete na starejšo različico.
Razvoj Gita se je začel leta 2005. Skupina jeder Linux je nekoč vzdrževala svojo kodo v BitKeeperju, lastniškem sistemu porazdeljenega nadzora različic. Vendar je BitKeeper umaknil svojo brezplačno uporabo izdelka. Tako je Linus Torvalds, ustvarjalec in glavni razvijalec Linuxa, zasnoval nov odprtokodni sistem za nadzor distribuiranih različic, ki bo ustrezal zahtevam razvojne skupnosti Linuxa. In Git se je rodil.
Kot porazdeljeni sistem za nadzor različic Git ne zahteva centraliziranega organa za sledenje kode. Starejše centralizirane kontrole različic, kot so CVS, SVN ali Perforce, zahtevajo, da centralni strežniki vodijo zgodovino sprememb. Git lahko spremlja vse spremembe lokalno in dela peer-to-peer. Torej je bolj vsestranski kot centralizirani sistemi.
Vprašanja:
- Zakaj bi uporabljal Git?
- Kakšna je prednost porazdeljenega nadzora različic?
Namestitev Git
Za sisteme Linux je namestitev Gita enostavna. Če uporabljate distribucijo na osnovi Debiana, kot je Ubuntu, lahko uporabite apt install:
$ sudo apt namestite git-allZa Fedoro, RHEL ali CentOS lahko uporabite:
$ sudo dnf namestite git-allZ naslednjim ukazom lahko preverite, ali je bil Git nameščen:
$ git --verzijaPrikazati bi vam morala različico Gita, ki ste jo namestili, na primer:
git različica 2.17.0Ko ste namestili Git, je čas, da nastavite svoje uporabniško ime in e-pošto:
$ git config --global uporabnik.ime "yourusername"$ git config --global uporabnik.email "[email protected]"
Z naslednjim ukazom lahko preverite, ali so bile konfiguracije pravilno nastavljene:
$ git config --listuporabnik.name = vašeime uporabnika
uporabnik.email = yourusername @ primer.com
Namig: Pomembno je, da nastavite uporabnika.ime in uporabnik.e-pošto, ker se te konfiguracije uporabljajo za sledenje spremembam.
Vprašanja
- Kakšen je ukaz za namestitev Gita v sistem Linux?
- Zakaj bi morali nastaviti uporabnika.ime in uporabnik.konfiguracija e-pošte? Kako jih nastavite?
Konceptualno razumevanje Git
Če želite uporabljati Git, morate najprej razumeti te štiri koncepte:
- Delovni imenik
- Uprizoritveno območje
- Repozitorij
- Oddaljeno skladišče
Delovni imenik, odrsko območje in odlagališče so lokalni za vašo napravo. Oddaljeno skladišče je lahko kateri koli drug računalnik ali strežnik. Pomislimo na te koncepte kot na štiri škatle, v katere lahko shranimo standardne papirje A1.
Recimo, da pišete dokument ročno na papir A1 za pisalno mizo. Ta dokument hranite v delujočem polju imenika. Na določeni stopnji svojega dela se odločite, da ste pripravljeni hraniti kopijo že opravljenega dela. Torej naredite fotokopijo trenutnega papirja in ga položite v uprizoritveno škatlo.
Uprizoritveno polje je začasno območje. Če se odločite, da boste fotokopijo zavrgli v uprizoritvenem polju in jo posodobili z novo kopijo dokumenta delovnega imenika, ne bo trajnega zapisa tega insceniranega dokumenta.
Recimo, da ste precej prepričani, da želite v pripravljalnem polju hraniti trajni zapis dokumenta, ki ga imate. Nato naredite fotokopijo dokumenta o uprizoritvenem polju in ga premaknete v polje repozitorija.
Ko ga premaknete v polje repozitorija, se zgodita dve stvari:
- Posnetek dokumenta je trajno shranjen.
- V dnevniško datoteko je vpisan posnetek.
Vnos v dnevnik vam bo pomagal najti ta posnetek vašega dokumenta, če ga boste potrebovali v prihodnosti.
Zdaj imate v oknu lokalnega repozitorija posnetek svojega dela in vnos v dnevnik. Na voljo pa je samo vam. Torej naredite kopijo dokumenta lokalnega repozitorija skupaj z datoteko dnevnika in ga shranite v polje v dobavni sobi podjetja. Zdaj lahko vsak v vašem podjetju pride in naredi kopijo vašega dokumenta ter ga odnese na svojo mizo. Škatla v oskrbovalni sobi bi bila oddaljeno skladišče.
Oddaljeno skladišče je nekako tako, kot da bi dokument delili z Google Dokumenti ali Dropboxom.
Vprašanja:
- Ali lahko določite delovni imenik, uprizoritev, odlagališče in oddaljeno odlagališče?
- Ali lahko narišete, kako se dokumenti premikajo iz ene stopnje v drugo?
Vaše prvo skladišče Git
Ko ste namestili Git, lahko začnete ustvarjati lastne repozitorije Git. V tem razdelku boste inicializirali svoje skladišče Git.
Recimo, da delate na projektu spletnega razvoja. Ustvarimo mapo z imenom project_helloworld in jo spremenimo v imenik:
$ mkdir project_helloworld$ cd project_helloworld
Gitu lahko naročite, naj nadzira ta imenik z naslednjim ukazom:
$ git initMorali bi videti takšen izhod:
Inicializirano prazno repozitorij Git v / Users / zakh / _work / LearnGIT / git_tutorial /project_helloworld /.git
Zdaj bo vsem datotekam in mapam znotraj project_helloworld sledil Git.
Vprašanja:
- Kako inicializirate imenik, ki mu bo sledil Git?
Osnovni ukazi Git: stanje, dnevnik, dodajanje in objava
Ukaz status prikazuje trenutno stanje vašega delovnega imenika, ukaz log pa zgodovino. Preizkusimo ukaz status:
$ git statusNa poveljniku podružnice
Začetni prevzem
ničesar za zavezovanje (ustvarjanje / kopiranje datotek in uporaba "git add" za sledenje)
Rezultat ukaza git status pravi, da ste v glavni veji. To je privzeta veja, ki jo Git inicializira. (Lahko ustvarite svoje veje. Več o poslovalnicah kasneje). Tudi rezultat govori, da se ni treba kaj zavezati.
Preizkusimo ukaz log:
$ git logusodno: vaša trenutna podružnica 'master' še nima nobenih prevzemov
Čas je, da ustvarite kodo. Ustvarimo datoteko z imenom index.html:
Pozdravljen, svet
Datoteko lahko uporabite z urejevalnikom besedil. Ko datoteko shranite, znova preverite njeno stanje:
$ git statusNa poveljniku podružnice
Začetni prevzem
Datoteke brez sledenja:
(uporabite "git add
indeks.html
nič ni dodano za objavo, vendar so prisotne datoteke, ki jim ni sledeno (za sledenje uporabite "git add")
Git vam sporoča, da imate datoteko z imenom index.html v delovnem imeniku, ki mu ni sledeno.
Poskrbimo za indeks.html sledi. Uporabiti boste morali ukaz add:
$ git dodaj indeks.htmlLahko pa uporabite ".”Možnost dodajanja vsega v imenik:
$ git add .Zdaj pa ponovno preverimo stanje:
$ git statusNa poveljniku podružnice
Začetni prevzem
Predlagane spremembe:
(uporabite "git rm --cached
nova datoteka: indeks.html
Zelena označuje, da indeks.html sledi Git.
Namig: Kot je navedeno v zgornjih navodilih, če uporabljate ukaz:
$ git rm --cached indeks.htmlVaš indeks.html se bo vrnil v stanje brez sledenja. Če ga želite vrniti na uprizoritev, ga boste morali znova dodati.]
Ponovno preverimo dnevnik:
$ git logusodno: vaša trenutna podružnica 'master' še nima nobenih prevzemov
Torej, čeprav Git sledi indeksu.html, v repozitoriju Git o datoteki še ni ničesar. Zavolimo svoje spremembe:
$ git commit -m "Indeks predaje.html "Izhod bi moral izgledati nekako takole:
[master (root-commit) f136d22] Indeks predaje.html
1 datoteka spremenjena, 6 vstavkov (+)
ustvari način 100644 indeks.html
Besedilo znotraj narekovajev za “-m” je komentar, ki bo šel v datoteko dnevnika. Lahko uporabite git commit brez “-m”, nato pa bo Git odprl urejevalnik besedil, ki vas prosi, da napišete komentarje. Komentarje je lažje postaviti neposredno v ukazno vrstico.
Zdaj pa preverimo našo dnevniško datoteko:
$ git logzavezi f136d22040ba81686c9522f4ff94961a68751af7
Avtor: Zak H
Datum: ponedeljek, 4. junij 16:53:42 2018 -0700
Indeks predaje.html
Vidite, da prikazuje zavezo. Svoje spremembe ste uspešno objavili v svojem lokalnem skladišču. Če želite videti isti dnevnik na kratko, lahko uporabite naslednji ukaz:
$ git log --onelinef136d22 Indeks predaje.html
V nadaljevanju bomo uporabili to obliko ukaza log, ker lažje razumemo, kaj se dogaja.
Začnimo z urejanjem indeksa.html. Odprite indeks.html v urejevalniku in spremenite vrstico »Hello world« v »Hello world! Jaz sem!"In ga shranite. Če ponovno preverite stanje, boste videli, da je Git opazil, da urejate datoteko:
$ git statusNa poveljniku podružnice
Spremembe niso predvidene za prevzem:
(uporabite "git add
(uporabite "git checkout --
spremenjeno: indeks.html
za objavo ni dodanih sprememb (uporabite "git add" in / ali "git commit -a")
Sprememba je še vedno v vašem delovnem imeniku. Potisniti ga morate na odrsko območje. Uporabite ukaz add, ki ste ga uporabljali prej:
$ git add .Ponovno preverite stanje:
$ git statusNa poveljniku podružnice
Predlagane spremembe:
(uporabite "git reset HEAD
spremenjeno: indeks.html
Zdaj so vaše spremembe na odrskem območju. Lahko ga predate v skladišče za trajno hrambo:
$ git commit -m "Spremenjen indeks.html do srečnejšega sporočila "[master 0586662] Spremenjen indeks.html do srečnejšega sporočila
1 datoteka spremenjena, 1 vstavljanje (+), 1 brisanje (-)
V dnevniku lahko preverite svoje stalne spremembe:
$ git log --oneline0586662 Spremenjen indeks.html do srečnejšega sporočila
f136d22 Indeks predaje.html
V tem razdelku ste se naučili uporabljati ukaze statusa, dnevnika, dodajanja in urejanja za sledenje dokumentov v Gitu.
Vprašanja:
- Kaj počne git status?
- Kaj počne git log?
- Kaj naredi git add?
- Kaj naredi git commit?
Vrnitev na starejše datoteke s storitvijo Checkout
Ko datoteko dodelite v Git, ustvari edinstveno razpršitev za vsako objavo. Te lahko uporabite kot identifikatorje za vrnitev na starejšo različico.
Recimo, da se želite vrniti na prejšnjo različico indeksa.html. Najprej si oglejmo indeks.html v trenutnem stanju:
indeks $ cat.htmlPozdravljen, svet! Jaz sem!
Vidite, da imate novejšo različico (“Hello world! Jaz sem!"). Preverimo dnevnik:
$ git log --oneline0586662 Spremenjen indeks.html do srečnejšega sporočila
f136d22 Indeks predaje.html
Hash za prejšnjo različico je bil f136d22 (“Hello world”). Za dostop do te različice lahko uporabite ukaz checkout:
$ git checkout f136d22Opomba: preverite 'f136d22'.
Ste v stanju "odcepljena HEAD". Lahko se ozrete naokoli, naredite poskusne spremembe
in jih zavežete, vse obveznosti, ki jih naredite v tem stanju, pa lahko zavržete
ne da bi vplivali na veje, tako da bi izvedli drugo blagajno.
Če želite ustvariti novo vejo, da ohrani zaveze, ki ste jih ustvarili, lahko
to storite (zdaj ali kasneje) znova z uporabo -b z ukazom checkout. Primer:
git checkout -b
HEAD je zdaj na f136d22… Indeks predaje.html
Če pogledate vsebino indeksa.html, boste videli:
indeks $ cat.htmlPozdravljen, svet
Ima samo “Hello world”. Torej vaš indeks.html se je spremenil v starejšo različico. Če preverite stanje:
$ git statusGLAVA ločena na f136d22
nič za zavezati, delovni imenik čist
Git vam v bistvu sporoča, da HEAD ni na zadnjem prevzemu. Na najnovejšo odobritev se lahko vrnete tako, da preverite glavno vejo z naslednjim ukazom:
$ git checkout masterPrejšnji položaj HEAD je bil f136d22… Indeks predaje.html
Preklopljeno na vejo 'master'
Zdaj, če preverite stanje:
$ git statusNa poveljniku podružnice
nič za zavezati, delovni imenik čist
Rdečega opozorila ni več. Tudi če preverite indeks.html, morali bi se vrniti na najnovejšo različico:
indeks $ cat.htmlPozdravljen, svet! Jaz sem!
Ukaz checkout vas pripelje v različna stanja. Več o blagajni bomo izvedeli v naslednjem poglavju.
Vprašanja:
- Kako z ukazom git checkout odprete starejšo različico datoteke?
- Kako uporabljate git checkout za vrnitev na najnovejšo različico datoteke?
Nakup, razvejanje in združevanje
Razvejanje je ena najboljših lastnosti Gita. Pomaga vam ločiti svoje delo in več eksperimentirati. V drugih sistemih za nadzor različic je bilo razvejanje zamudno in težko. Git je olajšal razvejanje in združevanje.
Kot ste opazili v ukazu status, ste pri ustvarjanju novega repozitorija Git v glavni veji.
$ git statusNa poveljniku podružnice
nič za zavezati, delovni imenik čist
Recimo, da izdelujete spletno mesto za svojega prijatelja Davida. Znova želite uporabiti kodo svojega spletnega mesta. Razvejanje je odlična rešitev. Pokličimo podružnico david_website.
Izdate lahko naslednji ukaz:
$ git podružnica david_websiteZa ogled vseh vej lahko uporabite naslednji ukaz:
$ git podružnica --listspletna stran david_
* mojster
Zvezdica (*) poleg mojstra pomeni, da ste še vedno v glavni veji. Podružnico david_website lahko preverite z naslednjim ukazom:
$ git checkout david_websitePreklopljeno na vejo 'david_website'
Zdaj, če ponovno preverite seznam podružnic, vidite:
$ git podružnica --list* spletna stran david_
mojster
Torej ste na podružnici david_website.
Spremenimo indeks.html iz “Hello world! Jaz sem!«Na» Pozdravljeni svet! David je!"In nato izvedite in zavežite:
$ git add .$ git commit -m "Spremenjeno spletno mesto za Davida"
Če preverite dnevnike, bi morali videti:
$ git log --oneline345c0f4 Spremenjeno spletno mesto za Davida
0586662 Spremenjen indeks.html do srečnejšega sporočila
f136d22 Indeks predaje.html
In vaša indeksna datoteka bi morala izgledati tako:
indeks $ cat.htmlPozdravljen, svet! David je!
Zdaj pa preverimo glavno vejo:
$ git checkout masterPreklopljeno na vejo 'master'
Če preverite stanje in dnevnik:
$ git statusNa poveljniku podružnice
nič za zavezati, delovni imenik čist
$ git log --oneline
0586662 Spremenjen indeks.html do srečnejšega sporočila
f136d22 Indeks predaje.html
Upoštevajte, da v glavni enoti nimate tretjega prevzema. Ker se ta predaja vzdržuje samo v veji david_website.
To se je zgodilo
Recimo, da se na tej stopnji odločite, da ne želite nadaljevati svojega spletnega mesta. Samo razvijalec boš David. Torej želite združiti spremembe v veji david_website v glavni. V glavni veji morate samo izdati naslednje ukaze (z ukazom stanja preverite, ali ste na pravem mestu):
$ git statusNa poveljniku podružnice
nič za zavezati, delovni imenik čist
$ git spajanje david_website
Posodabljanje 0586662… 345c0f4
Hitro naprej
indeks.html | 2 +-
1 datoteka spremenjena, 1 vstavljanje (+), 1 brisanje (-)
Namig: Spremembe vlečete s spletnega mesta david_web na master. Če želite to doseči, morate biti glavni.
Zdaj, če preverite dnevnik na glavni enoti, vidite, da je tretji prevzem:
$ git log --oneline345c0f4 Spremenjeno spletno mesto za Davida
0586662 Spremenjen indeks.html do srečnejšega sporočila
f136d22 Indeks predaje.html
Uspešno ste združili vejo david_website v master. In vaš indeks.html za glavno podružnico izgleda enako podružnici david_website:
indeks $ cat.htmlPozdravljen, svet! David je!
Podružnico david_website lahko obdržite:
$ git podružnica --listspletna stran david_
* mojster
Lahko pa ga tudi izbrišete:
$ git podružnica -d david_websiteIzbrisana podružnica david_website (je bilo 345c0f4).
Po izbrisu ne smete več videti veje david_website:
$ git podružnica --list* mojster
Namig: Če se med spajanjem Git ne bo mogel samodejno združiti, vam bo prišlo do napak pri spoju. V tem primeru morate težave z združevanjem rešiti ročno.
Vprašanja:
- Zakaj potrebujete razvejanje?
- Kako razvejate in združite datoteke in mape?
Oddaljeno skladišče
Do zdaj je bilo vse vaše delo lokalno. Svoje spremembe ste predali lokalnemu repozitoriju. Toda čas je, da svoje delo delite s svetom.
Git oddaljeno repozitorij je v bistvu še ena kopija vašega lokalnega repozitorija, do katerega lahko dostopajo drugi. Lahko nastavite strežnik in ga spremenite v oddaljeno repozitorij. Toda večina ljudi v ta namen uporablja GitHub ali Bitbucket. Tam lahko brezplačno ustvarite javne repozitorije, do katerih lahko dostopa vsak.
Ustvarimo oddaljeno skladišče na GitHubu.
Najprej morate ustvariti račun GitHub []. Ko imate račun, ustvarite novo skladišče z gumbom »Novo skladišče«. Kot ime repozitorija uporabite »project_website« (če želite, lahko izberete kaj drugega).
Videli bi zavihek Koda z navodili, kot so ta:
… Ali ustvarite novo skladišče v ukazni vrstici
echo "# project_website" >> README.mdgit init
git dodaj README.md
git commit -m "prva odobritev"
git daljinsko dodaj izvor git @ github.com: vaše uporabniško ime / spletno mesto_projekta.git
git push -u izvorni mojster
Kopirajte naslednji ukaz “git remote add origin” in ga zaženite v svojem delovnem imeniku:
$ git remote add origin git @ github.com: vaše uporabniško ime / spletno mesto_projekta.gitOpomba: V vašem primeru bi moralo biti vaše uporabniško ime tisto, s čimer ste ustvarili svoj račun GitHub.
V zgornjem ukazu ste Gitu naročili lokacijo oddaljenega repozitorija. Ukaz Gitu sporoča, da bo "izvor" za vaš delovni imenik project_helloworld "[zaščiten po e-pošti]: vaše uporabniško ime / projekt_spletna stran.git ".
Zdaj potisnite svojo kodo iz glavne veje v izvor (oddaljeno repozitorij):
$ git push izvorni mojsterŠtetje predmetov: 9, končano.
Delta stiskanje z uporabo do 4 niti.
Stiskanje predmetov: 100% (6/6), končano.
Pisanje predmetov: 100% (9/9), 803 bajtov | 0 bajtov / s, končano.
Skupaj 9 (delta 2), ponovno uporabljena 0 (delta 0)
daljinsko: Razreševanje delt: 100% (2/2), končano.
Za git @ github.com: vaše uporabniško ime / spletno mesto_projekta.git
* [nova veja] master -> master
Če osvežite brskalnik v GitHub, bi morali videti, da je indeks.html datoteka je tam zgoraj. Vaša koda je torej javna, drugi razvijalci pa lahko preverjajo in spreminjajo kodo v oddaljenem repozitoriju.
Kot razvijalec boste delali s kodo drugih ljudi. Zato je vredno poskusiti preveriti kodo iz GitHub-a.
Pojdimo v nov imenik, kjer nimate ničesar. Na desni strani repozitorija GitHub boste opazili gumb »Kloniraj ali prenesi«. Če ga kliknete, vam mora dati SSH naslov. Zaženite naslednji ukaz z naslovom SSH:
$ git klon git @ github.com: vaše uporabniško ime / spletno mesto_projekta.gitIzhod bi moral izgledati tako:
$ git klon git @ github.com: vaše uporabniško ime / spletno mesto_projekta.gitKloniranje v 'project_website' ..
daljinsko: Štetje predmetov: 9, končano.
daljinsko: Stiskanje predmetov: 100% (4/4), končano.
daljinsko: skupaj 9 (delta 2), ponovno uporabljeno 9 (delta 2), ponovno uporabljeno 0
Sprejem predmetov: 100% (9/9), končano.
Reševanje delt: 100% (2/2), končano.
Preverjanje povezanosti ... končano.
V vaši čisti mapi bo ustvaril spletno mesto project_web. Če greš noter, bi moral videti kazalo.html iz vašega project_helloworld.
Torej ste dosegli naslednje:
- Ustvaril in spremenil projekt_helloworld
- Kodo sem naložil v GitHub na spletni strani project_website
- Kodo sem prenesel iz GitHub-a
Poglejmo še eno datoteko iz novega delovnega imenika project_website:
$ touch ReadMe.md$ git add .
$ git commit -m "Dodan ReadMe.md "
$ git push izvorni mojster
Če osvežite stran spletnega mesta GitHub project_website, bi morali videti ReadMe.md tam.
Opomba: Ko prenesete kodo iz GitHub, delovni imenik samodejno pozna izvor. Ni vam treba določiti z ukazom "git remote add origin".
Vprašanja:
- Zakaj morate uporabljati oddaljene repozitorije?
- Kako nastavite svoj trenutni lokalni repozitorij za povezavo z oddaljenim repozitoriju?
- Kako klonirate oddaljene repozitorije v svoj lokalni računalnik?
Zaključek
Več informacij o vseh ukazih najdete v dokumentih Git []. Čeprav so na voljo orodja za uporabniški vmesnik Git, je ukazna vrstica najboljši način za obvladovanje Gita. To vam bo dalo močnejše temelje za vaše razvojno delo.
Nadaljni študij:
- https: // git-scm.com / docs
- https: // git-scm.com / book / en / v2
- https: // git-scm.com / video posnetki