-
1. Početak
- 1.1 O kontroli verzije
- 1.2 Kratka istorija Gita
- 1.3 Osnove Gita
- 1.4 Komandna linija
- 1.5 Instaliranje Gita
- 1.6 Podešavanja za prvi put
- 1.7 Traženje pomoći
- 1.8 Rezime
-
2. Osnove Gita
- 2.1 Pravljenje Git repozitorijuma
- 2.2 Snimanje promena na repozitorijumu
- 2.3 Pregled istorije komitova
- 2.4 Opovrgavanje
- 2.5 Rad sa udaljenim repozitorijumima
- 2.6 Tagovanje
- 2.7 Alijasi
- 2.8 Rezime
-
3. Grananje u Gitu
- 3.1 Grananje ukratko
- 3.2 Osnove grananja i spajanja
- 3.3 Upravljanje granama
- 3.4 Tokovi rada sa grananjem
- 3.5 Udaljene grane
- 3.6 Rebaziranje
- 3.7 Rezime
-
4. Git on the Server
- 4.1 Protokoli
- 4.2 Postavljanje Gita na server
- 4.3 Generisanje javnog SSH ključa
- 4.4 Podešavanje servera
- 4.5 Git Daemon
- 4.6 Pametan HTTP
- 4.7 GitWeb
- 4.8 Opcije za hostovanje koje nude treća lica
- 4.9 Rezime
-
5. Distribuirani Git
- 5.1 Distribuirani tokovi rada
- 5.2 Kako doprineti projektu
- 5.3 Održavanje projekta
- 5.4 Rezime
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Prilagođavanje Gita
- 8.1 Konfiguracija Gita
- 8.2 Git atributi
- 8.3 Git hukovi
- 8.4 Primer polise sprovedene od strane Gita
- 8.5 Rezime
-
9. Git i ostali sistemi
- 9.1 Git kao klijent
- 9.2 Migriranje na Git
- 9.3 Rezime
-
10. Git iznutra
- 10.1 Vodovod i porcelan
- 10.2 Git objekti
- 10.3 Git reference
- 10.4 Paketoteke
- 10.5 Refspek
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
-
A1. Appendix A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Summary
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
2.5 Osnove Gita - Rad sa udaljenim repozitorijumima
Rad sa udaljenim repozitorijumima
Da biste mogli da kolaborirate na bilo kom Git projektu, morate da naučite kako da ogranizujete udaljene repozitorijume (remote repositories, često samo remotes). Udaljeni repozitorijumi su verzije projekta koje su hostovane na internetu ili negde na mreži. Možete ih imati nekoliko, od kojih vam je svaki u opštem slučaju ili dostupan samo za čitanje (read-only) ili i za čitanje i za upis (read/write). Kolaboracija sa drugima podrazumeva upravljanje tim udaljenim repozitorijumima i guranje (push) i povlačenje (pull) podataka kada je potrebno podeliti rad. Pod upravljanjem udaljenim repozitorijumima smatra se dodavanje udaljenog repozitorijuma, uklanjanje onih koji više nisu validni, upravljanje raznim udaljenim granama i njihovo definisanje kao praćene ili nepraćene, i još toga. U ovom odeljku ćemo preći neke od ovih stavki.
Prikaz udaljenih repozitorijuma
Da biste videli koje udaljene servere imate konfigurisane, možete da pokrenete komandu git remote
. Ona će izlistati skraćena imena svih udaljenih repozitorijuma koje ste specificirali. Ako ste klonirali repozitorijum, trebalo bi da barem vidite origin
- to je podrazumevano ime koje Git daje serveru sa koga ste klonirali.
$ git clone https://github.com/schacon/ticgit
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
origin
Možete da specificirate i -v
, što će pokazati URL-ove koje je Git uskladištio za kratko ime koje se koristi kada se čita i piše po tom udaljenom repozitorijumu:
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
Ako imate više od jednog udaljenog repozitorijuma, ova komanda će ih sve izlistati. Na primer, repozitorijum sa više rimoutova za rad sa nekoliko kolaboratora bi mogao da izgleda ovako.
$ cd grit
$ git remote -v
bakkdoor https://github.com/bakkdoor/grit (fetch)
bakkdoor https://github.com/bakkdoor/grit (push)
cho45 https://github.com/cho45/grit (fetch)
cho45 https://github.com/cho45/grit (push)
defunkt https://github.com/defunkt/grit (fetch)
defunkt https://github.com/defunkt/grit (push)
koke git://github.com/koke/grit.git (fetch)
koke git://github.com/koke/grit.git (push)
origin git@github.com:mojombo/grit.git (fetch)
origin git@github.com:mojombo/grit.git (push)
Ovo znači da možemo da povučemo doprinos od bilo kog od ovih korisnika prilično jednostavno. Možda dodatno imamo i dozvolu da šaljemo jednom ili više njih, mada to ne možemo da vidimo odavde.
Obratite pažnju na to kako udaljeni repozitorijumi koriste razne protokole; o ovome ćemo detaljnije pričati u Git on the Server.
Dodavanje udaljenih repozitorijuma
Pomenuli smo i demonstrirali dodavanje udaljenih repozitorijuma u prethodnim sekcijama, ali evo kako se to eksplicitno radi.
Da biste dodali novi udaljeni Git repozitorijum kao kratko ime na koje ćete kasnije lako moći da se pozovete, pokrenite git remote add <kratko_ime> <url>
:
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)
Sada možete da koristite pb
u komandnoj liniji umesto velikog URL-a. Na primer, ako hoćete da pribavite sve informacije koje Pol ima ali vi još nemate u svom repozitorijumu, možete da pokrenete git fetch pb
:
$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit
Polova master grana je sada pristupna lokalno u pb/master
— možete da je spojite sa nekom vašom granom, ili da čekautujete lokalnu granu ako želite da je detaljnije pregledate.
(Mnogo detaljnije ćemo se pozabaviti time šta su tačno grane i kako se koriste u Grananje u Gitu.)
Pribavljanje i povlačenje iz udaljenih repozitorijuma
Kao što ste upravo videli, podatke iz udaljenih projekata dobijate tako što pokrenete
$ git fetch <ime-udaljenog-repozitorijuma>
Komanda odlazi do tog udaljenog projekta i povlači sve podatke sa njega koje još uvek nemate. Nakon što uradite ovo, treba da imate reference na sve grane iz tog udaljenog repozitorijuma, koje možete da spojite sa svojim ili da ih istražite u bilo kom trenutku.
Ako klonirate repozitorijum, komanda automatski dodaje taj udaljeni repozitorijum pod imenom origin
.
Dakle, git fetch origin
pribavlja sav novi rad koji je poslat ka tom serveru otkad ste ga klonirali (ili pribavili nešto s njega).
Bitno je napomenuti da komanda git fetch
povlači podatke u vaš lokalni repozitorijum - ne spaja ih automatski sa vašim radom niti modifikuje ono na čemu trenutno radite.
Morate da ih spojite ručno kada budete spremni.
Ako imate granu koja je podešena tako da prati udaljenu granu (pogledajte sledeći odeljak i Grananje u Gitu za više informacija), možete da iskoristite git pull
da automatski pribavite i onda spojite udaljenu granu u vašu trenutnu granu.
Ovo je možda jednostavniji ili udobniji tok rada za vas; i po podrazumevanim podešavanjima, git clone
komanda automatski postavlja lokalnu master
granu da prati udaljenu master
granu (ili kako god se zove podrazumevana grana) na serveru sa kojeg ste klonirali.
Pokretanje git pull
u opštem slučaju pribavlja podatke sa servera sa kog ste prvobitno klonirali i automatski pokušava da spoji u njega kod na kome trenutno radite.
Guranje ka udaljenim repozitorijumima
Kada vaš projekat dosegne stanje u kojem poželite da ga podelite, morate da ga pogurate uzvodno.
Komanda za ovo je prosta: git push [ime-rimouta] [ime-grane]
.
Ako želite da pošaljete na master granu vašem origin
serveru (opet, kloniranje u opštem slučaju postavlja oba ova imena automatski), onda možete da pokrenete ovo da pošaljete sve komitove koje ste uradili na serveru:
$ git push origin master
Ova komanda radi samo ako ste klonirali sa servera ka kojem imate pristup pisanja i ako niko nije slao podatke u međuvremenu. Ako zajedno sa nekim istovremeno klonirate i onda on ili ona pošalje izmene a zatim vi pošaljete svoje, vaša izmena će biti odbijena s pravom. Moraćete da najpre povučete njegov ili njen rad i da ga inkorporišete u svoj pre nego što vam bude dozvoljeno da pošaljete bilo šta. Pogledajte Grananje u Gitu za detaljnije objašnjenje o tome kako se šalje na udaljene servere.
Istraživanje udaljenog repozitorijuma
Ako želite da vidite više informacija o određenom udaljenom repozitorijumu, možete da iskoristite git remote show [ime-rimouta]
komandu.
Ako ovo pokrenete sa određenim kratkim imenom, kao što je origin
, dobićete nešto ovako.
$ git remote show origin
* remote origin
Fetch URL: https://github.com/schacon/ticgit
Push URL: https://github.com/schacon/ticgit
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
To će izlistati URL-ove za udaljene repozitorijume kao i informaciju o praćenim granama.
Komanda vam čini uslugu time što vam kaže da ako ste na master
grani i ako pokrenete git pull
, automatski će se spojiti u master
granu na udaljenom repozitorijumu nakon što pribavi sve udaljene reference.
U listi se takođe nalaze i udaljene reference koje su povučene.
To je prost primer na koji ćete verovatno naići.
Kada malo ozbiljnije počnete da koristite Git, međutim, videćete mnogo više informacija zvanjem git remote show
:
$ git remote show origin
* remote origin
URL: https://github.com/my-org/complex-project
Fetch URL: https://github.com/my-org/complex-project
Push URL: https://github.com/my-org/complex-project
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
markdown-strip tracked
issue-43 new (next fetch will store in remotes/origin)
issue-45 new (next fetch will store in remotes/origin)
refs/remotes/origin/issue-11 stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
dev-branch merges with remote dev-branch
master merges with remote master
Local refs configured for 'git push':
dev-branch pushes to dev-branch (up to date)
markdown-strip pushes to markdown-strip (up to date)
master pushes to master (up to date)
Ova komanda pokazuje koja grana je automatski poslata vama kada ste pokrenuli git push
dok ste na određenim granama.
Takođe vam pokazuje i koje udaljene grane na serveru još uvek nemate, koje udaljene grane imate koje su uklonjene sa severa, i više lokalnih grana koje mogu da se automatski spoje sa odgovarajućim pratećim granama kad pokrenete git pull
.
Uklanjanje i promena imena udaljenim repozitorijumima
Ako želite da preimenujete referencu možete da pokrenete git remote rename
da promenite kratko ime udaljenom repozitorijumu.
Na primer, ako želite da pb
preimenujete u paul
, to možete uraditi pomoću naredbe git remote rename
:
$ git remote rename pb paul
$ git remote
origin
paul
Vredi napomenuti da ovo menja i imena vašim udaljenim granama. Ono što je ranije bilo referencirano sa pb/master
se sada nalazi na paul/master
.
Ako želite da uklonite udaljeni repozitorijum iz nekog razloga — pomerili ste server ili više ne koristite neki miror, ili možda kontributor više ne kontribuira — možete da iskoristite git remote rm
:
$ git remote rm paul
$ git remote
origin