-
1. Почетак
- 1.1 О контроли верзије
- 1.2 Кратка историја програма Гит
- 1.3 Шта је Гит?
- 1.4 Командна линија
- 1.5 Инсталирање програма Гит
- 1.6 Подешавања за први пут
- 1.7 Тражење помоћи
- 1.8 Резиме
-
2. Основе програма Гит
- 2.1 Прављење Гит репозиторијума
- 2.2 Снимање промена над репозиторијумом
- 2.3 Преглед историје комитова
- 2.4 Опозив
- 2.5 Рад са удаљеним репозиторијумима
- 2.6 Означавање
- 2.7 Гит алијаси
- 2.8 Резиме
-
3. Гранање у програму Гит
- 3.1 Укратко о гранању
- 3.2 Основе гранања и спајања
- 3.3 Управљање гранама
- 3.4 Процеси рада са гранањем
- 3.5 Удаљене гране
- 3.6 Ребазирање
- 3.7 Резиме
-
4. Гит на серверу
- 4.1 Протоколи
- 4.2 Постављање програма Гит на сервер
- 4.3 Генерисање јавног SSH кључа
- 4.4 Подешавање сервера
- 4.5 Гит демон
- 4.6 Паметан HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Опције за хостовање које нуде трећа лица
- 4.10 Резиме
-
5. Дистрибуирани Гит
-
6. GitHub
-
7. Гит алати
- 7.1 Избор ревизија
- 7.2 Интерактивно стејџовање
- 7.3 Скривање и чишћење
- 7.4 Потписивање вашег рада
- 7.5 Претрага
- 7.6 Поновно исписивање историје
- 7.7 Демистификовани ресет
- 7.8 Напредно спајање
- 7.9 Rerere
- 7.10 Отклањање грешака са програмом Git
- 7.11 Подмодули
- 7.12 Паковање
- 7.13 Замена
- 7.14 Складиште акредитива
- 7.15 Резиме
-
8. Прилагођавање програма Гит
- 8.1 Конфигурисање програма Гит
- 8.2 Гит атрибути
- 8.3 Гит куке
- 8.4 Пример полисе коју спроводи програм Гит
- 8.5 Резиме
-
9. Гит и остали системи
- 9.1 Гит као клијент
- 9.2 Мигрирање на Гит
- 9.3 Резиме
-
10. Гит изнутра
- 10.1 Водовод и порцелан
- 10.2 Гит објекти
- 10.3 Гит референце
- 10.4 Pack фајлови
- 10.5 Рефспек
- 10.6 Протоколи за пренос
- 10.7 Одржавање и опоравак податак
- 10.8 Променљиве окружења
- 10.9 Резиме
-
A1. Додатак А: Програм Гит у другим окружењима
- A1.1 Графички интерфејси
- A1.2 Гит у Visual Studio
- A1.3 Гит у Visual Studio Code
- A1.4 Гит у IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Гит у Sublime Text
- A1.6 Гит унутар Bash
- A1.7 Гит у Zsh
- A1.8 Гит у Powershell
- A1.9 Резиме
-
A2. Додатак Б: Уграђивање програма Гит у ваше апликације
- A2.1 Гит из командне линије
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Додатак В: Гит команде
- A3.1 Подешавање и конфигурација
- A3.2 Набављање и креирање пројеката
- A3.3 Основно снимање
- A3.4 Гранање и спајање
- A3.5 Дељење и ажурирање пројеката
- A3.6 Инспекција и поређење
- A3.7 Отклањање грешака
- A3.8 Крпљење
- A3.9 Имејл
- A3.10 Спољни системи
- A3.11 Администрација
- A3.12 Водоводне команде
2.5 Основе програма Гит - Рад са удаљеним репозиторијумима
Рад са удаљеним репозиторијумима
Да бисте могли да сарађујете на било ком Гит пројекту, морате да научите како да организујете удаљене репозиторијуме (remote repositories, често само remotes). Удаљени репозиторијуми су верзије пројекта које су хостоване на Интернету или негде на мрежи. Можете их имати неколико, од којих вам је сваки у општем случају или доступан само за читање (read-only) или и за читање и за упис (read/write). Сарадња са другима подразумева управљање тим удаљеним репозиторијумима и гурање (push) и повлачење (pull) података када је потребно поделити рад. Управљање удаљеним репозиторијумима подразумева да знате како се додају удаљени репозиторијуми, уклањају они који више нису важећи, управљање разним удаљеним гранама и њихово дефинисање као оне које се прате или оне које се не прате и још тога. У овом одељку ћемо прећи неке од тих вештина управљања удаљеним репозиторијумима.
Белешка
|
Удаљени репозиторијуми могу да се налазе и на вашој локалној машини.
Сасвим је могуће да радите са „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 git@github.com:mojombo/grit.git (fetch)
origin git@github.com:mojombo/grit.git (push)
Ово значи да прилично једноставно можемо да повучемо доприносе од било ког од ових корисника. Можда додатно имамо и дозволу да шаљемо једном или више њих, мада то не можемо да видимо одавде.
Обратите пажњу на то како удаљени репозиторијуми користе разне протоколе; о овоме ћемо детаљније причати у Гранање у програму Гит.
Додавање удаљених репозиторијума
Поменули смо и показали на неколико примера како команда 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
— можете да је спојите са неком од ваших грана, или у том тренутку можете да одјавите локалну грану ако желите да је прегледате.
У Гранање у програму Гит ћемо се много детаљније позабавити тиме шта су тачно гране и како се користе.
Добављање и повлачење из удаљених репозиторијума
Као што сте управо видели, податке из својих удаљених пројеката добављате тако што извршите:
$ git fetch <име-удаљеног-репозиторијума>
Команда одлази до тог удаљеног пројекта и повлачи све податке са њега које још увек немате. Након што урадите ово, требало би да имате референце на све гране из тог удаљеног репозиторијума, које можете да спојите са својим или да их у било ком тренутку истражите.
Ако клонирате репозиторијум, команда аутоматски додаје тај удаљени репозиторијум под именом „origin”.
Дакле, git fetch origin
добавља сав нови рад који је гурнут на тај сервер након тренутка када сте га клонирали (или добавили с њега).
Битно је напоменути да команда git fetch
само преузима податке у ваш локални репозиторијум - не спаја их аутоматски са вашим радом нити мења оно на чему тренутно радите.
Морате ручно да их спојите када будете спремни.
Ако је ваша текућа грана подешена тако да прати удаљену грану (за више информација погледајте следећи одељак и Гранање у програму Гит), можете да искористите команду git pull
која аутоматски добавља, па затим спаја ту удаљену грану са вашом тренутном граном.
За вас је ово можда једноставнији или удобнији процес рада; и са подразумеваним подешавањима, команда git clone
аутоматски поставља локалну master
грану тако да прати удаљену master
грану (или како год се зове подразумевана грана) на серверу са којег сте извршили клонирање.
Извршавање git pull
у општем случају добавља податке са сервера са ког сте првобитно клонирали репозиторијум и аутоматски покушава да их споји са кодом на коме тренутно радите.
Белешка
|
Почевши од верзије 2.27 програма Гит па надаље, команда Ако желите подразумевано понашање програма гит (премотавање унапред (fast-forward) ако је то могуће, а у случају да није, креирање комита спајања):
Ако желите да се одради ребазирање (rebase) када се повлачи:
|
Гурање ка удаљеним репозиторијумима
Када ваш пројекат дође у стање у којем ваш рад пожелите да поделите са другима, морате да га погурате узводно.
Команда за ово је проста: git push <име-удаљеног> <име-гране>
.
Ако своју master
желите да погурате вашем origin
серверу (још једном, клонирање у општем случају аутоматски поставља оба ова имена уместо вас), онда можете извршити следећу команду којом гурате на сервер све комитове које сте урадили:
$ git push origin master
Ова команда функционише само ако сте извршили клонирање са сервера на којем имате дозволу за упис и ако у међувремену нико није слао податке. Ако заједно са неким истовремено клонирате, па онда он или она пошаље измене узводно, а затим ви покушате да пошаљете своје, ваше измене ће с правом бити одбијене. Мораћете најпре да добавите његов или њен рад и да га уградите у свој пре него што вам буде дозвољено да пошаљете било шта. Погледајте Гранање у програму Гит за детаљније објашњење о томе како се шаље на удаљене сервере.
Истраживање удаљеног репозиторијума
Ако желите да видите више информација о одређеном удаљеном репозиторијуму, можете да искористите команду 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
Једном када на овај начин уклоните референцу на удаљени репозиторијум, бришу се и све гране које прате удаљене, као и сва подешавања придружена том удаљеном репозиторијуму.