Да бисте могли да сарађујете на било ком Гит пројекту, морате да научите како да организујете удаљене репозиторијуме (remote repositories, често само remotes). Удаљени репозиторијуми су верзије пројекта које су хостоване на Интернету или негде на мрежи. Можете их имати неколико, од којих вам је сваки у општем случају или доступан само за читање (read-only) или и за читање и за упис (read/write). Сарадња са другима подразумева управљање тим удаљеним репозиторијумима и гурање (push) и повлачење (pull) података када је потребно поделити рад. Управљање удаљеним репозиторијумима подразумева да знате како се додају удаљени репозиторијуми, уклањају они који више нису важећи, управљање разним удаљеним гранама и њихово дефинисање као оне које се прате или оне које се не прате и још тога. У овом одељку ћемо прећи неке од тих вештина управљања удаљеним репозиторијумима.
Note
|
Удаљени репозиторијуми могу да се налазе и на вашој локалној машини.
Сасвим је могуће да радите са „remote” (удаљеним) репозиторијумом који се уствари налази на истом хосту на којем тренутно радите. Реч „remote” не повлачи обавезно да се репозиторијум налази негде на Интернету или на мрежи, већ само да је на неком другом месту. За рад са таквим удаљеним репозиторијумом су још увек потребне стандардне операције гурање, повлачење и добављање (fetching) као и са било којим другим удаљеним репозиторијумом. |
Да бисте видели које удаљени сервери су конфигурисани, можете да извршите команду git remote
.
Она приказује скраћена имена свих удаљених репозиторијума које сте задали.
Ако сте клонирали репозиторијум, требало би да барем видите origin
- то је подразумевано име које програм Гит даје серверу са кога сте извршили клонирање:
$ 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
Такође можете да наведете и -v
, што ће приказати URL адресе које је програм Гит ускладиштио уз кратко име које се користе када се чита и пише у тај удаљени репозиторијум:
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
Ако имате више од једног удаљеног репозиторијума, ова команда ће их све излистати. На пример, репозиторијум са више удаљених репозиторијума за рад са неколико сарадника би могао да изгледа овако:
$ 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 [email protected]:mojombo/grit.git (fetch)
origin [email protected]:mojombo/grit.git (push)
Ово значи да прилично једноставно можемо да повучемо доприносе од било ког од ових корисника. Можда додатно имамо и дозволу да шаљемо једном или више њих, мада то не можемо да видимо одавде.
Обратите пажњу на то како удаљени репозиторијуми користе разне протоколе; о овоме ћемо детаљније причати у ch03-git-branching.asc.
Поменули смо и показали на неколико примера како команда git clone
имплицитно за вас додаје origin
удаљени репозиторијум.
Ево како се експлицитно додаје нови удаљени репозиторијум.
Ако желите да додате нови удаљени Гит репозиторијум као кратко име на које ћете касније лако моћи да се позовете, извршите команду git remote add <кратко_име> <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)
Сада у командној линији можете да користите pb
уместо комплетне URL адресе.
На пример, ако хоћете да добавите све информације које има Пол, а које ви још увек немате у свом репозиторијуму, можете да извршите 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
Полова master
грана је сада доступна локално као pb/master
— можете да је спојите са неком од ваших грана, или у том тренутку можете да одјавите локалну грану ако желите да је прегледате.
У ch03-git-branching.asc ћемо се много детаљније позабавити тиме шта су тачно гране и како се користе.
Као што сте управо видели, податке из својих удаљених пројеката добављате тако што извршите:
$ git fetch <име-удаљеног-репозиторијума>
Команда одлази до тог удаљеног пројекта и повлачи све податке са њега које још увек немате. Након што урадите ово, требало би да имате референце на све гране из тог удаљеног репозиторијума, које можете да спојите са својим или да их у било ком тренутку истражите.
Ако клонирате репозиторијум, команда аутоматски додаје тај удаљени репозиторијум под именом „origin”.
Дакле, git fetch origin
добавља сав нови рад који је гурнут на тај сервер након тренутка када сте га клонирали (или добавили с њега).
Битно је напоменути да команда git fetch
само преузима податке у ваш локални репозиторијум - не спаја их аутоматски са вашим радом нити мења оно на чему тренутно радите.
Морате ручно да их спојите када будете спремни.
Ако је ваша текућа грана подешена тако да прати удаљену грану (за више информација погледајте следећи одељак и ch03-git-branching.asc), можете да искористите команду git pull
која аутоматски добавља, па затим спаја ту удаљену грану са вашом тренутном граном.
За вас је ово можда једноставнији или удобнији процес рада; и са подразумеваним подешавањима, команда git clone
аутоматски поставља локалну master
грану тако да прати удаљену master
грану (или како год се зове подразумевана грана) на серверу са којег сте извршили клонирање.
Извршавање git pull
у општем случају добавља податке са сервера са ког сте првобитно клонирали репозиторијум и аутоматски покушава да их споји са кодом на коме тренутно радите.
Note
|
Почевши од верзије 2.27 програма Гит па надаље, команда Ако желите подразумевано понашање програма гит (премотавање унапред (fast-forward) ако је то могуће, а у случају да није, креирање комита спајања):
Ако желите да се одради ребазирање (rebase) када се повлачи:
|
Када ваш пројекат дође у стање у којем ваш рад пожелите да поделите са другима, морате да га погурате узводно.
Команда за ово је проста: git push <име-удаљеног> <име-гране>
.
Ако своју master
желите да погурате вашем origin
серверу (још једном, клонирање у општем случају аутоматски поставља оба ова имена уместо вас), онда можете извршити следећу команду којом гурате на сервер све комитове које сте урадили:
$ git push origin master
Ова команда функционише само ако сте извршили клонирање са сервера на којем имате дозволу за упис и ако у међувремену нико није слао податке. Ако заједно са неким истовремено клонирате, па онда он или она пошаље измене узводно, а затим ви покушате да пошаљете своје, ваше измене ће с правом бити одбијене. Мораћете најпре да добавите његов или њен рад и да га уградите у свој пре него што вам буде дозвољено да пошаљете било шта. Погледајте ch03-git-branching.asc за детаљније објашњење о томе како се шаље на удаљене сервере.
Ако желите да видите више информација о одређеном удаљеном репозиторијуму, можете да искористите команду git remote show <име-удаљеног>
.
Ако ову команду покренете са одређеним кратким именом, као што је origin
, добићете нешто слично овоме:
$ 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)
То ће приказати URL адресе за удаљени репозиторијум као и информацију о грани која се прати.
Команда вам чини услугу тиме што вам каже да ако сте на master
грани и ако извршите git pull
, аутоматски ће спојити master
грану удаљеног репозиторијума са локалном након што је добави.
Такође приказује и удаљене референце које су повучене.
Ово је прост пример са којим ћете се вероватно сусретати.
Међутим, када мало озбиљније почнете да користите програм Гит, видећете много више информација ако извршите 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)
Ова команда показује у коју грана се аутоматски гура када извршите git push
док сте на одређеним гранама.
Такође вам показује и које удаљене гране на серверу још увек немате, које удаљене гране имате које су уклоњене са севера, и више локалних грана које аутоматски могу да се споје са својим одговарајућим удаљеним гранама које се прате онда кад извршите git pull
.
Ако желите да промените кратко име удаљеног репозиторијума, извршите команду git remote rename
.
На пример, ако pb
желите да промените у paul
, то можете урадити помоћу наредбе git remote rename
:
$ git remote rename pb paul
$ git remote
origin
paul
Вреди напоменути да ово мења и имена свим вашим удаљеним гранама које се прате.
Оно на шта је раније указивало pb/master
, сада је paul/master
.
Ако из неког разлога желите да уклоните удаљени репозиторијум — померили сте сервер или више не користите одређени мирор, или сарадник можда више не даје допринос пројекту — можете да искористите или git remote remove
или git remote rm
:
$ git remote rm paul
$ git remote
origin
Једном када на овај начин уклоните референцу на удаљени репозиторијум, бришу се и све гране које прате удаљене, као и сва подешавања придружена том удаљеном репозиторијуму.