Razvoj softvera zajednički je posao. Kao softverski inženjer, svoj rad morate podijeliti s drugima. Ali dijeljenje koda i suradnja mogu se zakomplicirati. Teško je pratiti razne promjene koje se događaju tijekom životnog ciklusa softvera. Stoga se razvojni timovi oslanjaju na alate za kontrolu verzija kako bi pomogli u procesu softverske suradnje. Git je jedan od najistaknutijih alata za kontrolu verzija u softverskoj industriji.
Savjet: U ovom vodiču naučit ćete kako se koristiti osnovama Gita. Svaki odjeljak završava s nekoliko pitanja. Pitanja možete pročitati prije nego što započnete čitati odjeljak. To će vam pomoći da razumijete i obratite pažnju na važne točke.
Zabavite se učeći Git!
Git: Kratki pregled
Git je distribuirani sustav kontrole verzija. Prati sve promjene koje unesete u datoteke i mape. Olakšava vam spremanje nedovršene proizvodnje. Ako postoji problem, možete jednostavno provjeriti stariju verziju datoteke ili mape. Ako je potrebno, možete čak i vratiti cijelu bazu kodova na stariju verziju.
Razvoj Gita započeo je 2005. godine. Grupa Linux kernela koristila je za održavanje svog koda u BitKeeper-u, vlasničkom distribuiranom sustavu za kontrolu verzija. Međutim, BitKeeper je povukao besplatno korištenje proizvoda. Tako je Linus Torvalds, tvorac i glavni programer Linuxa, dizajnirao novi sustav distribucije verzija otvorenog koda koji bi udovoljio zahtjevima razvojne zajednice Linuxa. I Git je rođen.
Kao distribuirani sustav kontrole verzija, Git ne zahtijeva centralizirano tijelo za praćenje koda. Starije centralizirane kontrole verzija kao što su CVS, SVN ili Perforce zahtijevaju da središnji poslužitelji održavaju povijest promjena. Git može lokalno pratiti sve promjene i raditi peer-to-peer. Dakle, svestraniji je od centraliziranih sustava.
Pitanja:
- Zašto biste trebali koristiti Git?
- Koja je prednost distribuirane kontrole verzija?
Instaliranje Gita
Za Linux sustave instalacija Gita je jednostavna. Ako koristite distribuciju zasnovanu na Debianu, poput Ubuntu, možete koristiti apt install:
$ sudo apt instalirati git-allZa Fedoru, RHEL ili CentOS možete koristiti:
$ sudo dnf instaliraj git-allMožete provjeriti je li Git instaliran pomoću sljedeće naredbe:
$ git --verzijaTrebao bi vam pokazati verziju Gita koju ste instalirali, na primjer:
git verzija 2.17.0Nakon što instalirate Git, vrijeme je da postavite svoje korisničko ime i e-adresu:
$ git config - globalni korisnik.ime "vašeimekorisnika"$ git config - globalni korisnik.e-pošta "[e-pošta zaštićena]"
Pomoću sljedeće naredbe možete provjeriti jesu li konfiguracije pravilno postavljene:
$ git config --listkorisnik.ime = vašeimekorisnika
korisnik.adresa e-pošte = yourusername @ primjer.com
Savjet: Važno je postaviti korisnika.ime i korisnik.e-poštu jer se ove konfiguracije koriste za praćenje vaših promjena.
Pitanja
- Koja je naredba za instaliranje Gita na vaš Linux sustav?
- Zašto biste trebali postaviti korisnika.ime i korisnik.konfiguracija e-pošte? Kako ih postavljate?
Konceptualno razumijevanje Gita
Da biste koristili Git, prvo morate razumjeti ova četiri pojma:
- Radni direktorij
- Scensko područje
- Spremište
- Udaljeno spremište
Radni direktorij, upravno područje i spremište lokalno su na vašem stroju. Udaljeno spremište može biti bilo koje drugo računalo ili poslužitelj. Zamislimo ove koncepte kao četiri kutije u koje se mogu smjestiti standardni A1 papiri.
Pretpostavimo da ručno pišete dokument na A1 papiru za svojim stolom. Ovaj dokument čuvate u radnom okviru direktorija. U određenoj fazi svog rada odlučite da ste spremni zadržati kopiju već obavljenog posla. Dakle, napravite fotokopiju svog trenutnog papira i stavite ga u okvir za inscenaciju.
Okvir za inscenaciju privremeno je područje. Ako odlučite odbaciti fotokopiju u okvir za inscenaciju i ažurirati je novom kopijom dokumenta radnog imenika, neće postojati trajni zapis tog insceniranog dokumenta.
Pretpostavimo da ste prilično sigurni da želite zadržati trajnu evidenciju dokumenta koji imate u pripremnom okviru. Zatim napravite fotokopiju dokumenta spremnika i premjestite ga u okvir spremišta.
Kad ga premjestite u okvir spremišta, događaju se dvije stvari:
- Snimka dokumenta sprema se trajno.
- Upisuje se datoteka dnevnika koja ide sa snimkom.
Unos u zapisnik pomoći će vam pronaći određenu snimku vašeg dokumenta ako vam zatreba u budućnosti.
Sada, u okviru lokalnog spremišta, imate snimak svog rada i unos u zapisnik. Ali dostupno je samo vama. Dakle, napravite kopiju dokumenta lokalnog spremišta zajedno s datotekom dnevnika i stavite ga u okvir u prostoriji tvrtke. Sada bilo tko u vašoj tvrtki može doći i napraviti kopiju vašeg dokumenta i odnijeti ga na svoj stol. Kutija u opskrbi bila bi udaljeno spremište.
Udaljeno spremište je poput dijeljenja dokumenta pomoću Google dokumenata ili Dropboxa.
Pitanja:
- Možete li definirati radni direktorij, stupnjevanje, spremište i udaljeno spremište?
- Možete li nacrtati kako se dokumenti premještaju iz jedne faze u drugu?
Vaše prvo Git spremište
Nakon što instalirate Git, možete započeti sa stvaranjem vlastitih Git spremišta. U ovom ćete odjeljku inicijalizirati svoje Git spremište.
Pretpostavimo da radite na projektu web razvoja. Stvorimo mapu nazvanu project_helloworld i promijenimo se u direktorij:
$ mkdir project_helloworld$ cd projekt_heloworld
Možete reći Gitu da nadgleda ovaj direktorij pomoću sljedeće naredbe:
$ git initTrebali biste vidjeti izlaz poput ovog:
Inicijalizirano prazno Git spremište u / Users / zakh / _work / LearnGIT / git_tutorial /projekt_heloworld /.git
Sada će sve datoteke i mape unutar project_helloworld pratiti Git.
Pitanja:
- Kako inicijalizirate direktorij koji će Git pratiti?
Osnovne Git naredbe: status, zapis, dodavanje i urezivanje
Naredba status prikazuje trenutno stanje vašeg radnog imenika, a naredba dnevnika prikazuje povijest. Pokušajmo naredbu status:
$ git statusNa majstoru grane
Početno predavanje
ništa za obvezivanje (stvaranje / kopiranje datoteka i korištenje "git add" za praćenje)
Izlaz naredbe git status govori da ste na glavnoj grani. Ovo je zadana grana koju Git inicijalizira. (Možete stvoriti vlastite grane. Više o poslovnicama kasnije). Također, izlaz govori da se nema što počiniti.
Pokušajmo naredbu log:
$ git zapisnikfatalno: vaša trenutna grana 'master' još nema nijednu obvezu
Dakle, vrijeme je za stvaranje nekog koda. Stvorimo datoteku koja se zove indeks.html:
Pozdrav svijete
Za izradu datoteke možete koristiti uređivač teksta. Nakon što spremite datoteku, ponovno provjerite status:
$ git statusNa majstoru grane
Početno predavanje
Nepraćene datoteke:
(upotrijebite "git add
indeks.html
ništa nije dodano za urezivanje, ali prisutne su datoteke bez praćenja (za praćenje koristite "git add")
Git vam govori da imate datoteku koja se zove index.html u vašem radnom direktoriju koji nije praćen.
Provjerimo indeks.html se prati. Morat ćete upotrijebiti naredbu add:
$ git dodaj indeks.htmlMožete koristiti i ".”Mogućnost dodavanja svega u direktorij:
$ git dodaj .Sada provjerimo status ponovo:
$ git statusNa majstoru grane
Početno predavanje
Promjene koje treba izvršiti:
(koristite "git rm --cached
nova datoteka: indeks.html
Zelena označava da indeks.html datoteku prati Git.
Savjet: Kao što je spomenuto u gornjim uputama, ako koristite naredbu:
$ git rm --cached indeks.htmlVaš indeks.html će se vratiti u status bez praćenja. Morat ćete ga dodati ponovo da biste ga vratili na scenu.]
Ponovno provjerimo zapisnik:
$ git zapisnikfatalno: vaša trenutna grana 'master' još nema nijednu obvezu
Pa iako Git prati indeks.html, u Git spremištu još nema ničega o datoteci. Zabilježimo naše promjene:
$ git commit -m "Indeks predavanja.html "Izlaz bi trebao izgledati otprilike ovako:
[master (root-commit) f136d22] Indeks predavanja.html
Promijenjena 1 datoteka, 6 umetanja (+)
stvoriti način rada 100644 indeks.html
Tekst unutar navodnika nakon "-m" komentar je koji će ući u datoteku dnevnika. Možete koristiti git commit bez "-m", ali tada će Git otvoriti uređivač teksta koji će tražiti da napišete komentare. Jednostavnije je samo staviti komentare izravno u naredbeni redak.
Sada provjerimo našu datoteku dnevnika:
$ git zapisnikpredati f136d22040ba81686c9522f4ff94961a68751af7
Autor: Zak H
Datum: pon 4. lipnja 16:53:42 2018 -0700
Indeks predavanja.html
Možete vidjeti da prikazuje počinjenje. Uspješno ste izvršili promjene na vašem lokalnom spremištu. Ako želite vidjeti isti zapis na jezgrovit način, možete upotrijebiti sljedeću naredbu:
$ git log --onelinef136d22 Indeks predavanja.html
Krećući se naprijed, koristit ćemo ovaj oblik naredbe dnevnika jer olakšava razumijevanje što se događa.
Počnimo s uređivanjem indeksa.html. Otvorite indeks.html u uređivaču i promijenite redak "Hello world" u "Hello world! Ja sam!I spremite ga. Ako ponovno provjerite status, vidjet ćete da je Git primijetio da uređujete datoteku:
$ git statusNa majstoru grane
Promjene nisu uprizorene za urezivanje:
(upotrijebite "git add
(koristite "git checkout --
izmijenjeno: indeks.html
bez dodavanja promjena u urezivanje (koristite "git add" i / ili "git commit -a")
Promjena je još uvijek u vašem radnom direktoriju. Morate ga gurnuti na mjesto uprizorenja. Upotrijebite naredbu add koju ste koristili prije:
$ git dodaj .Ponovno provjerite status:
$ git statusNa majstoru grane
Promjene koje treba izvršiti:
(koristite "git reset HEAD
izmijenjeno: indeks.html
Sada su vaše promjene u scenskom području. Možete ga predati u spremište na trajno čuvanje:
$ git commit -m "Izmijenjeni indeks.html do sretnije poruke "[master 0586662] Izmijenjeni indeks.html do sretnije poruke
1 datoteka promijenjena, 1 umetanje (+), 1 brisanje (-)
U zapisniku možete provjeriti trajne promjene:
$ git log --oneline0586662 Izmijenjeni indeks.html do sretnije poruke
f136d22 Indeks predavanja.html
U ovom ste odjeljku naučili koristiti naredbe statusa, evidentiranja, dodavanja i predavanja kako biste pratili svoje dokumente u Gitu.
Pitanja:
- Što radi git status?
- Što radi git log?
- Što čini git add?
- Što radi git commit?
Povratak na starije datoteke koristeći Checkout
Kada urežete datoteku u Git-u, ona stvara jedinstveni hash za svako urezivanje. Možete ih koristiti kao identifikatore za povratak na stariju verziju.
Pretpostavimo da se želite vratiti na svoju raniju verziju indeksa.html. Prvo, pogledajmo indeks.html u trenutnom stanju:
indeks $ mačka.htmlPozdrav svijete! Ja sam!
Vidite da imate noviju verziju („Zdravo svijete! Ja sam!"). Provjerimo zapisnik:
$ git log --oneline0586662 Izmijenjeni indeks.html do sretnije poruke
f136d22 Indeks predavanja.html
Raspršivanje za prethodnu verziju bilo je f136d22 ("Pozdrav svijetu"). Pomoću naredbe za naplatu možete doći do te verzije:
$ git naplata f136d22Napomena: provjeravanje 'f136d22'.
U stanju ste 'odvojena GLAVA'. Možete pogledati oko sebe, napraviti eksperimentalne promjene
i počinite ih, a možete odbaciti sve obveze koje izvršite u ovom stanju
bez utjecaja na bilo koju poslovnicu izvršavanjem druge provjere.
Ako želite stvoriti novu granu kako biste zadržali obveze koje ste stvorili, možete
učinite to (sada ili kasnije) ponovnim korištenjem -b s naredbom za naplatu. Primjer:
git checkout -b
HEAD je sada na f136d22… Indeks predavanja.html
Ako pogledate sadržaj indeksa.html, vidjet ćete:
indeks $ mačka.htmlPozdrav svijete
Ima samo "Hello world". Dakle, vaš indeks.html promijenio se u stariju verziju. Ako provjerite status:
$ git statusGLAVA odvojena na f136d22
ništa za obvezivanje, radni direktorij čist
Git vam u osnovi govori da HEAD nije na zadnjem urezivanju. Možete se vratiti najnovijem urezivanju provjerom glavne grane pomoću sljedeće naredbe:
$ git checkout masterPrethodna pozicija HEAD bila je f136d22 ... Indeks predavanja.html
Prebačeno na granu 'master'
Sada ako provjerite status:
$ git statusNa majstoru grane
ništa za obvezivanje, radni direktorij čist
Crveno upozorenje je nestalo. Također, ako provjerite svoj indeks.html, trebali biste se vratiti na najnoviju verziju:
indeks $ mačka.htmlPozdrav svijete! Ja sam!
Naredba checkout vodi vas u različita stanja. O naplati ćemo saznati više u sljedećem odjeljku.
Pitanja:
- Kako pomoću naredbe git checkout idete na stariju verziju datoteke?
- Kako koristite git checkout za povratak na najnoviju verziju datoteke?
Plaćanje, grananje i spajanje
Grananje je jedna od najboljih značajki Gita. Pomaže vam odvojiti posao i više eksperimentirati. U ostalim sustavima za upravljanje verzijama grananje je bilo dugotrajno i teško. Git je olakšao grananje i spajanje.
Kao što ste primijetili u naredbi statusa, kada kreirate novo Git spremište, nalazite se u glavnoj grani.
$ git statusNa majstoru grane
ništa za obvezivanje, radni direktorij čist
Pretpostavimo da izrađujete web stranicu za svog prijatelja Davida. Želite ponovno upotrijebiti kôd vlastite web stranice. Razgranavanje je izvrsno rješenje. Nazovimo granu david_website.
Možete izdati sljedeću naredbu:
$ git grana david_websiteSljedeću naredbu možete koristiti za prikaz svih grana:
$ git grana --listweb stranica david_
* ovladati; majstorski
Zvijezda (*) pored master-a znači da ste još uvijek u master grani. Granu david_website možete provjeriti sljedećom naredbom:
$ git checkout david_web stranicaPrebačeno na granu 'david_website'
Ako ponovno provjerite popis grana, vidjet ćete:
$ git grana --list* web stranica david_
ovladati; majstorski
Dakle, vi ste na grani david_website.
Promijenimo indeks.html iz “Hello world! Ja sam!"Do" Pozdrav svijete! David je!", A zatim izvedite i izvršite:
$ git dodaj .$ git commit -m "Promijenjeno web mjesto za Davida"
Ako provjerite zapisnike, trebali biste vidjeti:
$ git log --oneline345c0f4 Promijenjeno web mjesto za Davida
0586662 Izmijenjeni indeks.html do sretnije poruke
f136d22 Indeks predavanja.html
A vaša indeksna datoteka trebala bi izgledati ovako:
indeks $ mačka.htmlPozdrav svijete! David je!
Sada provjerimo glavnu granu:
$ git checkout masterPrebačeno na granu 'master'
Ako provjerite status i zapisnik:
$ git statusNa majstoru grane
ništa za obvezivanje, radni direktorij čist
$ git log --oneline
0586662 Izmijenjeni indeks.html do sretnije poruke
f136d22 Indeks predavanja.html
Primijetite da nemate svoj treći polog u masteru. Budući da se taj predaj održava samo u grani david_website.
To se dogodilo
Pretpostavimo da u ovoj fazi odlučite da ne želite nastaviti svoju web stranicu. Samo ćeš biti programer za Davida. Dakle, želite spojiti promjene u grani david_website s glavnim. Iz glavne grane jednostavno morate izdati sljedeće naredbe (naredba statusa koristi se za provjeru jeste li na pravom mjestu):
$ git statusNa majstoru grane
ništa za obvezivanje, radni direktorij čist
$ git spajanje david_website
Ažuriranje 0586662… 345c0f4
Premotavanje unaprijed
indeks.html | 2 +-
1 datoteka promijenjena, 1 umetanje (+), 1 brisanje (-)
Savjet: Povlačite promjene s web stranice david_weeter na master. Da biste to postigli, morate biti glavni.
Sada ako provjerite zapisnik na masteru, vidjet ćete da je tamo treći urezivanje:
$ git log --oneline345c0f4 Promijenjeno web mjesto za Davida
0586662 Izmijenjeni indeks.html do sretnije poruke
f136d22 Indeks predavanja.html
Uspješno ste spojili granu david_website u master. I vaš indeks.html za glavnu granu izgleda identično grani david_website:
indeks $ mačka.htmlPozdrav svijete! David je!
Možete zadržati granu david_website:
$ git grana --listweb stranica david_
* ovladati; majstorski
Ili ga možete izbrisati:
$ git grana -d web stranica david_Izbrisana grana david_website (bila je 345c0f4).
Nakon brisanja više ne biste trebali vidjeti granu david_website:
$ git grana --list* ovladati; majstorski
Savjet: Tijekom spajanja, ako se Git ne može spojiti automatski, dobit će vam pogreške pri spajanju. U tom slučaju morate ručno riješiti probleme spajanja.
Pitanja:
- Zašto vam treba grananje?
- Kako se granaju i spajaju datoteke i mape?
Udaljeno spremište
Do sada je sav vaš posao bio lokalni. Uveli ste svoje promjene u lokalno spremište. Ali vrijeme je da svoj posao podijelite sa svijetom.
Git udaljeno spremište je u osnovi još jedna kopija vašeg lokalnog spremišta kojem drugi mogu pristupiti. Možete postaviti poslužitelj i učiniti ga udaljenim spremištem. Ali većina ljudi u tu svrhu koristi GitHub ili Bitbucket. Tamo možete besplatno stvoriti javna spremišta kojima može pristupiti svatko.
Stvorimo udaljeno spremište na GitHubu.
Prvo morate stvoriti GitHub račun []. Nakon što imate račun, stvorite novo spremište pomoću gumba "Novo spremište". Upotrijebite "project_website" kao naziv spremišta (ako želite želite odabrati nešto drugo).
Trebali biste vidjeti karticu Code s uputama poput ovih:
... ili izradite novo spremište na naredbenom retku
echo "# project_website" >> README.doktor medicinegit init
git dodaj README.doktor medicine
git commit -m "prvo urezivanje"
git daljinski dodaj izvor git @ github.com: vaše korisničko ime / web-lokacija_projekta.git
git push -u master podrijetla
Kopirajte sljedeću naredbu “git remote add origin” i pokrenite je u svoj radni direktorij:
$ git remote dodaj podrijetlo git @ github.com: vaše korisničko ime / web-lokacija_projekta.gitNapomena: U vašem slučaju, vaše korisničko ime trebalo bi biti ono što ste koristili za izradu svog GitHub računa.
U gornjoj naredbi uputili ste Git mjesto udaljenog spremišta. Naredba govori Gitu da će "podrijetlo" za vaš radni direktorij project_helloworld biti "[zaštićen e-poštom]: vaše korisničko ime / web-lokacija_projekta.git ".
Sada gurnite svoj kôd iz glavne grane u izvor (udaljeno spremište):
$ git push master masterBrojanje predmeta: 9, gotovo.
Delta kompresija pomoću do 4 niti.
Komprimiranje predmeta: 100% (6/6), gotovo.
Zapisivanje objekata: 100% (9/9), 803 bajta | 0 bajtova / s, gotovo.
Ukupno 9 (delta 2), ponovno korišteno 0 (delta 0)
daljinski: Rješavanje delta: 100% (2/2), gotovo.
Za git @ github.com: vaše korisničko ime / web-lokacija_projekta.git
* [nova grana] master -> master
Ako osvježite svoj preglednik u GitHubu, trebali biste vidjeti da je indeks.html datoteka je tamo gore. Dakle, vaš je kôd javan, a drugi programeri mogu provjeriti i izmijeniti kôd na udaljenom spremištu.
Kao programer radit ćete s kodom drugih ljudi. Stoga vrijedi pokušati provjeriti kod s GitHub-a.
Idemo u novi direktorij u kojem nemate ništa. Na desnoj strani spremišta GitHub primijetit ćete gumb "Kloniraj ili preuzmi". Ako je kliknete, trebala bi vam dati SSH adresu. Pokrenite sljedeću naredbu sa SSH adresom:
$ git klon git @ github.com: vaše korisničko ime / web-lokacija_projekta.gitIzlaz bi trebao izgledati ovako:
$ git klon git @ github.com: vaše korisničko ime / web-lokacija_projekta.gitKloniranje u 'project_website' ..
daljinski: Brojanje predmeta: 9, gotovo.
daljinski: Komprimiranje predmeta: 100% (4/4), gotovo.
daljinski: Ukupno 9 (delta 2), ponovno upotrijebljeno 9 (delta 2), pakirano ponovno korišteno 0
Primanje predmeta: 100% (9/9), gotovo.
Rješavanje delta: 100% (2/2), gotovo.
Provjera povezanosti ... gotovo.
Stvorit će web lokaciju project_wee u vašoj čistoj mapi. Ako uđete unutra, trebali biste vidjeti indeks.html s vašeg project_helloworld.
Dakle, postigli ste sljedeće:
- Stvorio i napravio promjene u project_helloworld
- Kôd je prenio na GitHub na web-mjestu project_website
- Preuzeo kôd s GitHub-a
Idemo još jednu datoteku iz novog radnog imenika project_website:
$ touch ReadMe.doktor medicine$ git dodaj .
$ git commit -m "Dodan je ReadMe.doktor medicine"
$ git push master master
Ako osvježite stranicu web stranice GitHub project_website, trebali biste vidjeti ReadMe.md datoteka tamo.
Napomena: Kada preuzmete kôd s GitHub-a, radni direktorij automatski zna podrijetlo. Ne morate ga definirati naredbom "git remote add origin".
Pitanja:
- Zašto trebate koristiti udaljena spremišta?
- Kako postavljate svoje trenutno lokalno spremište za povezivanje s udaljenim spremištem?
- Kako klonirate udaljena spremišta na lokalno računalo?
Zaključak
Više informacija o svim naredbama možete pronaći u Git dokumentima []. Iako su dostupni Git UI alati, naredbena je crta najbolji način za svladavanje Gita. To će vam dati jači temelj za vaš razvojni rad.
Daljni studiji:
- https: // git-scm.com / docs
- https: // git-scm.com / book / en / v2
- https: // git-scm.com / video