-
1. Pričetek
- 1.1 O nadzoru različic
- 1.2 Kratka zgodovina Gita
- 1.3 Kaj je Git?
- 1.4 Ukazna vrstica
- 1.5 Git namestitev
- 1.6 Prva namestitev 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 Git aliasi
- 2.8 Povzetek
-
3. Veje Git
- 3.1 Veje na kratko
- 3.2 Osnove vej in združevanja
- 3.3 Upravljanje vej
- 3.4 Potek dela z vejami
- 3.5 Oddaljene veje
- 3.6 Ponovno baziranje (rebasing)
- 3.7 Povzetek
-
4. Git na strežniku
- 4.1 Protokoli
- 4.2 Pridobiti Git na strežnik
- 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 Tretje osebne opcije gostovanja
- 4.10 Povzetek
-
5. Distribuirani Git
- 5.1 Razdeljeni poteki dela
- 5.2 Prispevanje projektu
- 5.3 Vzdrževanje projekta
- 5.4 Povzetek
-
6. GitHub
-
7. Orodja Git
- 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 Povzetek
-
8. Prilagoditev Gita
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Kljuke Git
- 8.4 An Example Git-Enforced Policy
- 8.5 Povzetek
-
9. Git in ostali sistemi
- 9.1 Git kot klient
- 9.2 Migracija na Git
- 9.3 Povzetek
-
10. Notranjost Gita
- 10.1 Napeljava in keramika
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Povzetek
-
A1. Dodatek A: Git v drugih okoljih
- A1.1 Grafični vmesniki
- A1.2 Git v programu 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 vododovodne sisteme
3.5 Veje Git - Oddaljene veje
Oddaljene veje
Oddaljene reference so reference (kazalci) v vaših oddaljenih repozitorijih, vključno z vejami, oznakami itd.
Polni seznam oddaljenih referenc lahko dobite eksplicitno z git ls-remote (remote)
, ali git remote show (remote)
za oddaljene veje kot tudi več informacij.
Vseeno, bolj pogosti način je izkoristiti veje, ki sledijo daljavam.
Veje, ki sledijo daljavam so reference stanja oddaljenih vej. So lokalne reference, ki jih ne morete premakniti; premikajo se avtomatsko za vas kadarkoli naredite kakršnokoli omrežno komunikacijo. Veje, ki sledijo daljavam se obnašajo kot zaznamki, da vas spominjajo, kje so bile veje v vaših oddaljenih repozitorijih, ko ste se zadnjič nanje povezali.
Imajo obliko (remote)/(branch)
.
Na primer, če želite videti, kako je veja master
na vaši daljavi origin
izgledala od zadnjič, ko ste komunicirali z njim, bi preverili vejo origin/master
.
Če ste delali na težavi s partnerjem in je potisnil na vejo iss53
, imate morda vašo lastno lokalno vejo iss53
; vendar veja na strežniku bi kazala na pošiljanje pri origin/iss53
.
To je lahko nekoliko zmedeno, torej poglejmo primer.
Recimo, da imate strežnik Git na vašem omrežju pri git.ourcompany.com
.
Če klonirate iz tega, jo ukaz Git clone
avtomatično poimenuje origin
za vas, potegne vse njene podatke, ustvari kazalec, kjer je njena master
veja in jo lokalno poimenuje origin/master
.
Git vam da tudi vašo lokalno vejo master
, ki se začne na istem mestu kot veja izvora (origin) master
, torej imate nekaj za delati iz tega.
Opomba
|
``origin'' is not special
Tako kot ime veje |

Če naredite nekaj dela na vaši lokalni master veji in vmes nekdo drug potisne na git.ourcompany.com
in posodobi njegovo master
vejo, potem se bodo vaše zgodovine premaknile naprej različno.
Tudi, dokler ostanete izven kontakta z vašim izvornim strežnikom, se vaš origin/master
kazalec ne premakne.

Da sinhronizirate vaše delo, poženete ukaz git fetch origin
.
Ta ukaz poišče strežnik, kateri je `origin'' (v tem primeru je `git.ourcompany.com
), ujame kakršnekoli podatke iz njega, ki jih še nimate in posodobi vašo lokalno podatkovno bazo, premakne vaš kazalec origin/master
na njegovo novo, bolj posodobljeno pozicijo.

git fetch
updates your remote referencesZa demonstracijo imetja večih oddaljenih strežnikom in kako oddaljene veje za te oddaljene projekte izgledajo, predpostavimo, da imate drug interni strežnik Git, ki je uporabljen samo za razvoj s strani ene vaših šprintnih ekip.
Ta strežnik je na git.team1.ourcompany.com
.
Lahko ga dodate kot novo oddaljeno referenco k projektu, kjer trenutno delate s pogonom ukaza git remote add
, kot smo pokrili v [ch02-git-basics].
Poimenujte to daljavo teamone
, ki bo vašo kratko ime za ta celotni URL.

Sedaj lahko poženete git fetch teamone
, da ujamete celotni oddaljeni teamone
strežnik, ki ga še nimate.
Ker ima ta strežnik podmnožico podatkov, ki jih ima vaš strežnik origin
sedaj, Git ne ujame nobenih podatkov vendar skupke veje, ki sledi daljavi imenovana teamone/master
, ki kaže na pošiljanje, ki ga ima teamone
na njegovi veji master
.

teamone/master
Porivanje
Ko želite deliti vejo s svetom, jo morate poriniti na daljavo, za katero imate dostop pisanja. Vaše lokalne veje niso avtomatično sinhronizirane z daljavami, na katere pišete - morate eksplicitno potisniti na vejo, ki jo želite deliti. Na ta način lahko uporabite privatne veje za delo, ki ga ne želite deliti in porinete samo na tematske veje, s katerimi želite sodelovanje.
Če imate vejo imenovano serverfix
, na kateri želite delati z drugimi, lahko porinete nanjo na enak način, kakor ste porinili na vašo prvo vejo.
Poženite git push (remote) (branch)
:
$ git push origin serverfix
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
* [new branch] serverfix -> serverfix
To je nekakšna bližnjica.
Git avtomatično razširi ime veje serverfix
na ref/heads/serverfix:refs/heads/serverfix
, kar pomeni, Vzamimo mojo serverfix lokalno vejo in porinimo nanjo, da se posodobi oddaljeno serverfix branch.''
Šli bomo skozi
Vzamite mojo serverfix in jo naredite oddaljeno serverfix.''
To obliko lahko uporabite za porivanje lokalne veje na oddaljeno vejo, ki je poimenovana drugače.
Če ne želite, da se imenuje refs/heads/
del v podrobnosti v Notranjost Gita, vendar v splošnem lahko izpustite.
Lahko tudi naredite git push origin serverfix:serverfix
, ki naredi isto stvar - pove serverfix
na daljavi, lahko namesto tega poženete git push origin serverfix:awesomebranch
, da porinete vašo lokalno vejo serverfix
na vejo awesomebranch
na oddaljenem projektu.
Opomba
|
Don’t type your password every time
Če uporabljate HTTPS URL za porivanje, vas bo strežnik Git vprašal za uporabniško ime in geslo za overitev. Privzeto vas bo vprašal za te informacije na terminalu, tako da strežnik lahko pove, če vam je dovoljeno porivati. Če ne želite vpisovati vsakič, ko porivate, lahko nastavite Za več informacij o različnih opcij predpomnenja overilnic, ki so na voljo, glejte [r_credential_caching]. |
Naslednjič, ko eden izmed vaših sodelavcev ujame iz strežnika, bo dobil referenco, kjer je verzija strežnika serverfix
pod oddaljeno vejo origin/serverfix
:
$ git fetch origin
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/schacon/simplegit
* [new branch] serverfix -> origin/serverfix
Pomembno je opomniti, da ko naredite ujetje, ki prinese novo vejo, ki sledi daljavi, vam ni treba avtoatično imeti njihove lokalne, urejevalne kopije.
Z drugimi besedami v tem primeru, nimate nove veje serverfix
- imate samo kazalec origin/serverfix
, ki ga ne morete spremeniti.
Da združite to delo v vašo trenutno delovno vejo, lahko poženete git merge origin/serverfix
.
Če želite vašo lastno vejo serverfix
, na kateri lahko delate, lahko naredi osnovo iz vaše veje, ki sledi daljavi:
$ git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
To vam da lokalno vejo, na kateri lahko delate in se začne, kjer je origin/serverfix
.
Sledenje vej
Izpis lokalne veje iz veje, ki sledi daljavi avtomatično ustvari, kar se imenuj sledena veja'' oz.
tracking branch'' (ali nekaj kot je `upstream branch'').
Sledene vejeso lokalne veje, ki imajo direktno relacijo z oddaljeno vejo.
Če ste na sledeni veji in vpišete `git pull
, Git avtomatsko ve, iz katerega strežnika ujeti in vejo združiti.
Ko klonirate repozitorij, v splošnem avtomatično ustvari vejo master
, ki sled origin/master
.
Vendar lahko nastavite druge sledene veje, če želite - eno, ki sledi vejam na drugih daljavah ali ne sledi veji master
.
Enostaven primer je, kar ste ravnokar videli, poženite git checkout -b [branch] [remotename]/[branch]
.
To je dovolj pogosta operacija, ki jo git ponuja na kratko --track
:
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
Da nastavite lokalno vejo z različnim imenom kot je oddaljena veja, lahko enostavno uporabite prvo verzijo z različnim imenom lokalne veje:
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'
Sedaj vaša lokalna veja sf
bo avtomatično potegnila iz origin/serverfix
.
Če že imate lokalno vejo in želite nastaviti oddaljeno vejo, ki ste jo ravnokar potegnili ali želite spremeniti gorvodno vejo, ki ji slediti, lahko uporabite opcijo -u
ali --set-upstream-to
k git branch
, da jo eksplicitno nastavite kadarkoli.
$ git branch -u origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Opomba
|
Upstream shorthand
Ko imate sledeno vejo nastavljeno, lahko naredite nanjo referenco z |
Če želite videti, katero sledeno vejo imate nastavljeno, lahko uporabite opcijo -vv
k git branch
. To bo izpisalo vaše lokalne veje z več informacijami vključno, čemu vsaka veja sledi in če je vaša lokalna veja naprej, nazaj ali oboje.
$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
testing 5ea463a trying something new
Torej tu lahko vidite, da naša veja iss53
sledi origin/iss533
in je naprej - `ahead'' za dva, kar pomeni, da imate dve pošiljanji lokalno, ki nista porinjeni na strežnik. Lahko tudi vidimo, da vaša veja `master sledi `origin/master
in je posodobljena. Naslednje lahko vidimo, da vaša veja serverfix
sledi server-fix-good
veji na vašem teamone
strežniku in je naprej za tri in nazaj za eno, kar pomeni, da je eno pošiljanje na strežniku, ki ga še nismo združili in tri pošiljanja lokalno, ki jih še nismo potisnili. Na koncu lahko vidimo, da naša veja testing
ne sledi katerikoli oddaljeni veji.
Pomembno je opomniti, da te številke so samo od zadnjič, ko ste ujeli iz vsakega strežnika. Ta ukaz ne doseže strežnikov, pove vam o tem, kaj je ujel iz teh strežnikov lokalno. Če želite totalno posodobitev številk naprej ali nazaj, boste morali ujeti iz vseh vaših daljav ravno preden to poženete. To lahko naredite takole $ git fetch --all; git branch --vv
Porivanje
Medtem ko bo ukaz git fetch
ujel vse spremembe na strežniku, ki jih še nimate, ne bo nikakor spremenil vašega delovnega direktorija.
Enostavno bo dobil podatke za vas in vam omogočil, da jih združite sami.
Vendar pa obstaja ukaz imenovan git pull
, ki je v bistvu git fetch
, ki mu takoj sledi git merge
v večini primerov.
Če imate nastavljeno sledeno vejo, kot je demonstrirano v zadnji sekciji, ali eksplicitno nastavljeno ali da imate ustvarjeno za vas z ukazoma clone
ali checkout
, bo git pull
poiskal, kateremu strežniku in veji trenutna veja sledi, ujel iz tistega strežnika in nato poskusil združiti v to oddaljeno vejo.
V splošnem je bolje, da enostavno uporabite ukaza fetch
in merge
eksplicitno, saj je čarobnost git pull
pogostokrat zmedena.
Izbris oddaljenih vej
Predpostavimo, da ste končali z oddaljeno vejo - recimo, da ste vi in vaši sodelavci končali z lastnostjo in jo imate združeno v vašo oddaljeno vejo master
(ali katerokoli vejo, na kateri je vaša stabilna linija kode).
Lahko izbrišete oddaljeno vejo z uporabo opcije --delete
na git push
.
Če želite izbrisati vašo vejo serverfix
iz strežnika, poženite sledeče:
$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
- [deleted] serverfix
V osnovi vse kar naredi je, da odstrani kazalec iz strežnika. Git strežnik bo v splošnem obdržal podatke tam za nekaj časa, dokler se poganja zbirka smeti, torej če je bila po nesreči izbrisana, je pogostokrat povrnitev enostavna.