Git
Chapters ▾ 2nd Edition

2.5 Osnove Git - Delo z daljavami

Delo z daljavami

Da imate možnost sodelovanja na kateremkoli Git projektu, morate vedeti kako upravljati vaše oddaljene repozitorije. Oddaljeni repozitoriji so verzije vašega projekta, ki je gostovan na internetu ali nekje na omrežju. Imate lahko nekaj njih, vsak od njih v splošnem je ali za vas samo za branje ali za branje/pisanje. Sodelovanje z drugimi vključuje upravljanje teh oddaljenih repozitorijev in potiskanje in poteg podatkov vanje ali iz njih, ko potrebujete deliti delo. Upravljanje oddaljenih repozitorijev vključuje vedeti kako dodati oddaljene repozitorije, odstraniti daljave, ki niso več veljavne, upravljati različne oddaljene veje in jih definirati kot sledene ali ne in več. V tej sekciji bomo pokrili nekaj od teh oddaljenih upravljalnih veščin.

Prikaz vaših daljav

Da vidite, katere oddaljene strežnike ste nastavili, lahko poženete ukaz git remote. Izpiše kratka imena vsake daljave, ki ste jo določili. Če ste klonirali vaš repozitorij, bi morali videti vsak 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

Lahko tudi določite -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čimi daljavami za delo z večimi sodelavci, lahko izgleda 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 potegnemo sodelavce iz kateregakoli izmed teh uporabnikov precej enostavno. Morda moramo dodatno imeti pravice za potiskanje v enega ali več od le-teh, vendar tega ne moremo tu povedati.

Bodite pozorni, da te daljave uporabljajo številne protokole; več o njih bomo pokrili v Pridobiti Git na strežnik.

Dodajanje oddaljenih repozitorijev

Omenili in podali smo nekaj demonstracij dodajanja oddaljenih repozitorijev v prejšnjih sekcijah, vendar tu je tudi, kako to narediti eksplicitno. Da dodamo nov oddaljeni Git repozitorij kot kratko ime, se lahko nanj sklicujete enostavno, poženete 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 uporabite niz pb v ukazni vrstici namesto celotnega URL-ja. Na primer, če želite ujeti vse informacije, ki jih ima Paul, vendar jih vi še nimate v vašem 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 master veja je sedaj dostopna lokalno kot pb/master - lahko jo združite v eno izmed svojih vej, ali pa lahko izpišete lokalno vejo na tisti točki, če jo želite preiskati. (Šli bomo skozi, kaj so veje in kako jih uporabljati v več podrobnostih v Veje Git.)

Pridobivanje in poteg iz vaših daljav

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

$ git fetch [remote-name]

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

Če klonirate repozitorij, ukaz avtomatsko doda ta oddaljeni repozitorij pod ime “origin”. Torej git fetch origin ujame katerokoli delo, ki je bilo poslano na ta strežnik odkar ste klonirali (ali vsaj ujeli iz njega). Pomembno je opaziti, da ukaz git fetch potegne podatke v vaš lokalni repozitorij - avtomatsko ga ne združi s katerimkoli delom ali spremeni, na čemer trenutno delate. Združiti jih morate ročno v vaše delo, ko ste pripravljeni.

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

Potiskanje v vaše daljave

Ko imate vaš projekt na točki, ki jo želite deliti, morate potistniti smeri toka Ukaz za to je enostaven: git push [remote-name] [branch-name]. Če želite potisniti vašo master vejo v vaš origin strežnik (ponovno, kloniranje v splošnem nastavi oba od teh imen za vas avtomatsko), nato lahko poženete to s potiskanjem kateregakoli pošiljanja, ki ste ga naredili nazaj na strežnik:

$ git push origin master

Ta ukaz deluje samo če ste klonirali iz strežnika za katerega imate pravice pisati in če nihče vmes ne potisne. Če vi in še kdo drug klonirate istočasno in on potisne proti toku in nato vi potisnete navzgor, bo vaše potiskanje pravično zavrnjeno. Najprej boste morali potegniti njegovo delo in ga vdelati v vaše preden lahko potiskate. Glejte Veje Git za več podrobnih informacij, 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-name]. Č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 pove v pomoč, da če ste na master veji in poženete git pull, bo avtomatsko združil master vejo na daljavi ko ujame vse oddaljene reference. Izpiše tudi oddaljene reference, ki jih je potegnil.

To je enostaven primer, na katerega ste verjetno naleteli. Ko uporabljate Git bolj intenzivno, vendar lahko vidite veliko več informacij iz 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, ko ste na določenih vejah. Pokaže vam tudi, katerih oddaljenih vej na strežniku še nimate, katere oddaljene veje imate in so bile odstranjene iz strežnika in več vej, ki so avtomatsko združene, ko poženete git pull.

Odstranjevanje in preimenovanje oddaljenih vej

Če želite preimenovati referenco, lahko poženete git remote rename, da spremenite kratko ime daljave. 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 tudi spremeni imena vaših oddaljenih vej. Kar je bilo včasih sklicevano na pb/master je sedaj na paul/master.

Če želite odstraniti daljavo zaradi nekega razloga - ste prenesli strežnik ali ne uporabljate več določene preslikave, ali mogoče nekdo, ki je prispeval, sedaj ne prispeva več lahko uporabite git remote rm:

$ git remote rm paul
$ git remote
origin