Git

Git Vadnica za začetnike

Git Vadnica za začetnike

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:

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-all

Za Fedoro, RHEL ali CentOS lahko uporabite:

$ sudo dnf namestite git-all

Z naslednjim ukazom lahko preverite, ali je bil Git nameščen:

$ git --verzija

Prikazati bi vam morala različico Gita, ki ste jo namestili, na primer:

git različica 2.17.0

Ko 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 --list
uporabnik.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

Konceptualno razumevanje Git

Če želite uporabljati Git, morate najprej razumeti te štiri koncepte:

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:

  1. Posnetek dokumenta je trajno shranjen.
  2. 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:

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 init

Morali 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:

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 status
Na 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 log
usodno: vaša trenutna podružnica 'master' še nima nobenih prevzemov

Čas je, da ustvarite kodo. Ustvarimo datoteko z imenom index.html:


Moja spletna stran


Pozdravljen, svet

Datoteko lahko uporabite z urejevalnikom besedil. Ko datoteko shranite, znova preverite njeno stanje:

$ git status
Na poveljniku podružnice
Začetni prevzem
Datoteke brez sledenja:
(uporabite "git add … "Vključiti v to, kar bo storjeno)
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.html

Lahko pa uporabite ".”Možnost dodajanja vsega v imenik:

$ git add .

Zdaj pa ponovno preverimo stanje:

$ git status
Na poveljniku podružnice
Začetni prevzem
Predlagane spremembe:
(uporabite "git rm --cached … "Do odpovedi)
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.html

Vaš indeks.html se bo vrnil v stanje brez sledenja. Če ga želite vrniti na uprizoritev, ga boste morali znova dodati.]

Ponovno preverimo dnevnik:

$ git log
usodno: 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 log
zavezi 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 --oneline
f136d22 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 status
Na poveljniku podružnice
Spremembe niso predvidene za prevzem:
(uporabite "git add … "Posodobiti, kaj bo zavezano)
(uporabite "git checkout -- … ", Da se zavržejo spremembe v delovnem imeniku)
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 status
Na poveljniku podružnice
Predlagane spremembe:
(uporabite "git reset HEAD … "Do odpovedi)
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 --oneline
0586662 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.html

Moja spletna stran


Pozdravljen, svet! Jaz sem!

Vidite, da imate novejšo različico (“Hello world! Jaz sem!"). Preverimo dnevnik:

$ git log --oneline
0586662 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 f136d22
Opomba: 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.html

Moja spletna stran


Pozdravljen, svet

Ima samo “Hello world”. Torej vaš indeks.html se je spremenil v starejšo različico. Če preverite stanje:

$ git status
GLAVA 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 master
Prejšnji položaj HEAD je bil f136d22… Indeks predaje.html
Preklopljeno na vejo 'master'

Zdaj, če preverite stanje:

$ git status
Na 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.html

Moja spletna stran

Pozdravljen, 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 status
Na 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_website

Za ogled vseh vej lahko uporabite naslednji ukaz:

$ git podružnica --list
spletna 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_website
Preklopljeno 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 --oneline
345c0f4 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.html

Moja spletna stran


Pozdravljen, svet! David je!

Zdaj pa preverimo glavno vejo:

$ git checkout master
Preklopljeno na vejo 'master'

Če preverite stanje in dnevnik:

$ git status
Na 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 status
Na 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 --oneline
345c0f4 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.html

Moja spletna stran


Pozdravljen, svet! David je!

Podružnico david_website lahko obdržite:

$ git podružnica --list
spletna stran david_
* mojster

Lahko pa ga tudi izbrišete:

$ git podružnica -d david_website
Izbrisana 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.md
git 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.git

Opomba: 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.git

Izhod bi moral izgledati tako:

$ git klon git @ github.com: vaše uporabniško ime / spletno mesto_projekta.git
Kloniranje 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
Top 5 kartic za zajemanje iger
Vsi smo v YouTubu videli in oboževali pretakanje iger. PewDiePie, Jakesepticye in Markiplier so le nekateri izmed najboljših igralcev, ki so zaslužili...
Kako razviti igro na Linuxu
Pred desetletjem le malo uporabnikov Linuxa napoveduje, da bo njihov najljubši operacijski sistem nekoč priljubljena igralna platforma za komercialne ...
Odprtokodna vrata komercialnih igralnih sistemov
Brezplačne, odprtokodne in medplatformacijske igre, ki jih lahko uporabite za igranje starih, pa tudi nekaterih dokaj nedavnih naslovov iger. V tem čl...