Кроз ову књигу смо користили једноставна мапирања из удаљених грана на локалне референце, али она могу бити и сложенија. Претпоставимо да сте пратили неколико последњег одељака и креирали мали локални Гит репозиторијум, па сада желите да му додате remote (удаљени репозиторијум):
$ git remote add origin https://github.com/schacon/simplegit-progitИзвршавање ове команде додаје одељак у .git/config фајлу вашег репозиторијума, са наведеним именом удаљеног репозиторијума (origin), његовом URL адресом и рефспек (спецификацију референце) који ће се користити за преузимање:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/*:refs/remotes/origin/*Формат рефспека је прво необавезни ` за којим следи `<изв>:<одр>`, где је `<изв>` шаблон за референце на удаљеној страни, а `<одр>` је место на којем ће се те референце пратити локално.
Знак ` говори програму Гит да ажурира референцу чак и ако није у питању премотавање унапред.
У подразумеваном случају који аутоматски уписује команда git remote add, програм Гит преузима све референце под refs/heads/ на серверу и пише их локално у refs/remotes/origin/.
Дакле, ако на серверу постоји master грана, локално можете да приступите њеном логу на било који од следећих начина:
$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/masterСви су еквивалентни, јер их програм Гит развија на refs/remotes/origin/master.
Ако уместо тога желите да програм Гит сваки пут довуче само master грану, а не и сваку другу грану са удаљеног сервера, линију за преузимање можете да промените тако да указује само ту грану:
fetch = +refs/heads/master:refs/remotes/origin/masterОво је само подразумевани рефспек за git fetch за тај удаљени репозиторијум.
Ако само једном желите да преузмете, одређени рефспек такође можете да наведете и на командној линији.
Ако желите да master грану на удаљеном репозиторијуму повучете у локалну origin/mymaster, извршите следеће:
$ git fetch origin master:refs/remotes/origin/mymasterТакође можете да наведете и више рефспекова. Овако из командне линије повлачите неколико грана одједном:
$ git fetch origin master:refs/remotes/origin/mymaster \
topic:refs/remotes/origin/topic
From git@github.com:schacon/simplegit
! [rejected] master -> origin/mymaster (non fast forward)
* [new branch] topic -> origin/topicУ овом случају је повлачење master гране одбијено јер није у питању референца са брзим премотавањем унапред.
То можете да премостите ако испред рефспека наведете +.
Више рефспекова такође можете да наведете и у конфигурационом фајлу.
Ако сваки пут желите да преузимате master и experiment гране, додајте две линије:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/experiment:refs/remotes/origin/experimentПочевши са програмом Гит 2.6.0 у шаблону можете да користите парцијалне глобове који се подударају са више грана, тако да следеће функционише:
fetch = +refs/heads/qa*:refs/remotes/origin/qa*Још боље, исто можете да постигнете на уређенији начин ако употребите просторе имена (или директоријуме).
Ако имате QA тим (тим за контролу квалитета) који гура низ грана, а ви желите да преузмете master грану и било коју од грана QA тима, али ништа друго, можете да употребите овакав конфигурациони одељак:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/qa/*:refs/remotes/origin/qa/*Ако користите компликован процес рада у којем QA тим гура гране, програмери гурају гране и тимови за интеграцију гурају и сарађују на удаљеним гранама, на овај начин можете лако да их раздвојите у просторе имена.
Лепо је што референцу из простора имена можете да преузмете на овај начин, али како је уопште QA ставио њихове гране у qa/ простор имена?
То се постиже употребом рефспекова за гурање.
Ако QA тим жели да своју master грану гурне на qa/master на удаљеном серверу, могу да изврше:
$ git push origin master:refs/heads/qa/masterАко желе да програм Гит аутоматски то ради сваки пут када изврше git push origin, у свој конфигурациони фајл могу да додају push вредност:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/*:refs/remotes/origin/*
push = refs/heads/master:refs/heads/qa/masterДа поновимо, после овога ће git push origin подразумевано да гурне локалну master грану branch на удаљену грану qa/master.
|
Note
|
Рефспек не можете да искористите за преузимање из једног репозиторијума и гурање на други. Ако то желите да урадите, погледајте пример ch06-github.asc. |
Рефспек можете употребити и за брисање референци са удаљеног сервера тако што извршите нешто овако:
$ git push origin :topicПошто је рефспек <изв>:<одр>, ако изоставите <изв> део, у суштини кажете да се topic грана на удаљеном репозиторијуму постави ни на шта, односно да се обрише.
Или можете да употребите новију синтаксу (доступно од Гит v1.7.0):
$ git push origin --delete topic