Git
Chapters ▾ 2nd Edition

2.5 Osnove Git - Delo z daljavami

Delo z daljavami

Da lahko sodelujete na kateremkoli projektu Git, morate vedeti, kako upravljati vaše oddaljene repozitorije. Oddaljeni repozitoriji so različice vašega projekta, ki gostujejo nekje na internetu ali omrežju. Imate jih lahko več, v splošnem je za vas vsak od njih samo za branje ali pa za branje/pisanje. Sodelovanje z drugimi vključuje upravljanje teh oddaljenih repozitorijev, potiskanje in vlečenje podatkov vanje ali iz njih, ko morate deliti delo. Upravljanje oddaljenih repozitorijev vključuje vedeti, kako dodati oddaljene repozitorije, odstraniti daljave, ki niso več veljavne, upravljati različne oddaljene veje in kako jih definirati kot sledene ali ne in še več. V tem razdelku bomo pokrili nekaj od teh veščin upravljanja daljav.

Opomba
Oddaljeni repozitoriji so lahko na vaši lokalni napravi.

Popolnoma mogoče je, da delate z oddaljenim (angl. remote) repozitorijem, ki je v resnici na istem gostitelju kot vi. Beseda »oddaljen« ne pomeni nujno, da je repozitorij drugje na omrežju ali na internetu, temveč samo, da je drugje. Delo s takšnim oddaljenim repozitorijem še vedno vključuje vse standardne operacije potiskanja, vlečenja in pridobivanja kot pri katerem koli drugem oddaljenem repozitoriju.

Prikaz vaših daljav

Da pogledate, katere oddaljene strežnike ste nastavili, lahko poženete ukaz git remote. Izpiše kratka imena vsakega oprimka daljave, ki ste ga določili. Če ste klonirali svoj repozitorij, bi morali videti vsaj t. i. origin (izvor) — to je privzeto ime, ki ga Git da strežniku, iz katerega 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

Določite lahko tudi -v, ki vam pokaže URL-je, ki jih je Git shranil za kratko ime, ki bo uporabljeno, ko se bo bralo in pisalo na to daljavo:

$ git remote -v
origin	https://github.com/schacon/ticgit (fetch)
origin	https://github.com/schacon/ticgit (push)

Če imate več kot eno daljavo, ukaz izpiše vse. Na primer, repozitorij z več daljavami za delo z več sodelavci je lahko videti nekako takole.

$ 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)

To pomeni, da lahko precej enostavno povlečemo prispevke od kateregakoli od teh uporabnikov. Morda moramo dodatno imeti pravice za potiskanje v enega ali več od le-teh, vendar tega tu ne moremo vedeti.

Bodite pozorni, saj te daljave uporabljajo številne protokole; več o tem bomo pokrili v Pridobitev Gita na strežniku.

Dodajanje oddaljenih repozitorijev

Omenili in podali smo nekaj demonstracij, kako vam ukaz git clone posredno doda daljavo origin. Tako se doda nova daljava izrecno. Da dodate nov oddaljeni repozitorij Git kot kratko ime, na katerega se lahko enostavno sklicujete, poženite git remote add <shortname> <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)

Sedaj lahko v ukazni vrstici uporabite niz pb namesto celotnega URL-ja. Na primer, če želite prenesti vse informacije, ki jih ima Paul, vendar jih vi še nimate v svojem repozitoriju, lahko poženete 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

Paulova veja master je sedaj dostopna lokalno kot pb/master — lahko jo združite v eno izmed svojih vej, ali pa izvlečete lokalno vejo na tisti točki, ki jo želite preiskati. Kaj so veje in kako jih uporabljati, bomo šli bolj podrobno skozi v Veje Git.

Pridobivanje in vlečenje iz vaših daljav

Kot ste ravnokar videli, da dobite podatke iz svojih oddaljenih projektov, lahko poženete:

$ git fetch <remote>

Ukaz gre v oddaljeni projekt in iz tega oddaljenega projekta povleče vse podatke, ki jih še nimate. Ko to naredite, bi morali imeti reference na vse veje iz te daljave, ki jih lahko kadarkoli združite ali raziščete.

Če klonirate repozitorij, ukaz avtomatsko doda ta oddaljeni repozitorij pod ime »origin«. Torej, git fetch origin prinese katerokoli delo, ki je bilo potisnjeno na ta strežnik, odkar ste ga klonirali (ali zadnje prenešeno iz njega). Pomembno je opaziti, da ukaz git fetch samo prenese podatke v vaš lokalni repozitorij — avtomatsko jih ne združi s katerimkoli delom ali spremeni česa, na čemer trenutno delate. Združiti jih morate ročno v svoje delo, ko ste pripravljeni.

Če je vaša trenutna veja nastavljena, da sledi oddaljeni veji (za več informacij glejte naslednji razdelek in poglavje Veje Git), lahko uporabite ukaz git pull, da avtomatsko prinese in nato združi oddaljeno vejo v vašo trenutno vejo. To je lahko za vas enostavnejši ali bolj priročen potek dela; in privzeto ukaz git clone avtomatsko nastavi vašo lokalno vejo master, da sledi oddaljeni veji master (ali kakorkoli se privzeta veja imenuje) na strežniku, iz katerega ste klonirali. Pogon git pull v splošnem prinese podatke iz strežnika, iz katerega ste prvotno klonirali, in jih skuša avtomatsko združiti v kodo na kateri trenutno delate.

Opomba

Od verzije Git 2.27 naprej bo git pull izpisal opozorilo, če spremenljivka pull.rebase ni nastavljena. Git bo obdržal opozorilo, dokler ne nastavite te spremenljivke.

Če želite privzeto obnašanje Gita (fast-forward, če je možen, drugače ustvarite potrditev združevanja): git config --global pull.rebase "false"

Če želite ponovno bazirati, ko povlečete: git config --global pull.rebase "true"

Potiskanje na vaše daljave

Ko imate svoj projekt na točki, ki jo želite deliti, ga morate potisniti v povratni tok. Ukaz za to je enostaven: git push <remote> <branch>. Če želite potisniti vašo vejo master na vaš strežnik origin (ponovno, kloniranje vam v splošnem nastavi obe od teh imen avtomatsko), potem lahko to poženete, da potisnete nazaj na strežnik katerekoli potrditve, ki ste jih naredili:

$ git push origin master

Ta ukaz deluje samo, če ste klonirali iz strežnika, za katerega imate pravice pisanja in če nihče vmes ni ničesar potisnil. Če vi in še nekdo klonirata istočasno in drugi potisne proti toku ter nato potisnete proti toku še vi, bo vaše potiskanje pravilno zavrnjeno. Najprej boste morali prinesti delo drugega in ga vdelati v vaše, preden lahko potiskate. Za več podrobnih informacij si oglejte poglavje Veje Git, kako lahko potiskate na oddaljene strežnike.

Preverjanje daljave

Če želite videti več informacij o določeni daljavi, lahko uporabite ukaz git remote show <remote>. Če poženete ta ukaz z določenim kratkim imenom, kot je na primer origin, dobite nekaj takega:

$ 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)

Izpiše URL za oddaljeni repozitorij kot tudi informacije sledene veje. Ukaz vam koristno pove, da če ste na veji master in poženete git pull, bo avtomatsko združil oddaljeno vejo master v lokalno, ko se jo prinese. Izpiše tudi vse oddaljene reference, ki jih je povlekel.

To je enostaven primer, na katerega boste verjetno naleteli. Ko uporabljate Git bolj intenzivno, boste lahko videli veliko več informacij preko 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)

Ta ukaz pokaže, na katero vejo se avtomatsko potiska, ko poženete git push, medtem ko ste na določenih vejah. Pokaže vam tudi, katerih oddaljenih vej na strežniku še nimate pri sebi, katere oddaljene veje imate, ki so bile odstranjene iz strežnika, in več lokalnih vej, ki se lahko avtomatsko združijo s svojimi sledenimi oddaljenimi vejami, ko poženete git pull.

Preimenovanje in odstranjevanje daljav

Da spremenite kratko ime daljave, lahko poženete git remote rename. Na primer, če želite preimenovati pb v paul, lahko to naredite z git remote rename:

$ git remote rename pb paul
$ git remote
origin
paul

Vredno je omeniti, da to spremeni tudi vsa imena vaših sledenih oddaljenih vej. Kar se je včasih sklicevalo na pb/master, je sedaj na paul/master.

Če želite zaradi nekega razloga odstraniti daljavo — prenesli ste strežnik, ali pa določene zrcaljene lokacije ne uporabljate več, ali pa mogoče nekdo, ki je prispeval, sedaj ne dela več — lahko uporabite bodisi git remote remove ali pa git remote rm:

$ git remote remove paul
$ git remote
origin

Ko enkrat na ta način odstranite referenco na daljavo, bodo izbrisane tudi vse sledene oddaljene veje in konfiguracijske nastavitve povezane s to daljavo.

scroll-to-top