-
1. Начало
- 1.1 За Version Control системите
- 1.2 Кратка история на Git
- 1.3 Какво е Git
- 1.4 Конзолата на Git
- 1.5 Инсталиране на Git
- 1.6 Първоначална настройка на Git
- 1.7 Помощна информация в Git
- 1.8 Обобщение
-
2. Основи на Git
-
3. Клонове в Git
-
4. GitHub
-
5. Git инструменти
- 5.1 Избор на къмити
- 5.2 Интерактивно индексиране
- 5.3 Stashing и Cleaning
- 5.4 Подписване на вашата работа
- 5.5 Търсене
- 5.6 Манипулация на историята
- 5.7 Мистерията на командата Reset
- 5.8 Сливане за напреднали
- 5.9 Rerere
- 5.10 Дебъгване с Git
- 5.11 Подмодули
- 5.12 Пакети в Git (Bundling)
- 5.13 Заместване
- 5.14 Credential Storage система
- 5.15 Обобщение
-
6. Настройване на Git
- 6.1 Git конфигурации
- 6.2 Git атрибути
- 6.3 Git Hooks
- 6.4 Примерна Git-Enforced политика
- 6.5 Обобщение
-
7. Git и други системи
- 7.1 Git като клиент
- 7.2 Миграция към Git
- 7.3 Обобщение
-
8. Git на ниско ниво
- 8.1 Plumbing и Porcelain команди
- 8.2 Git обекти
- 8.3 Git референции
- 8.4 Packfiles
- 8.5 Refspec спецификации
- 8.6 Транспортни протоколи
- 8.7 Поддръжка и възстановяване на данни
- 8.8 Environment променливи
- 8.9 Обобщение
-
9. Приложение A: Git в други среди
-
10. Приложение B: Вграждане на Git в приложения
- 10.1 Git от команден ред
- 10.2 Libgit2
- 10.3 JGit
- 10.4 go-git
- 10.5 Dulwich
-
A1. Приложение C: Git команди
- A1.1 Настройки и конфигурация
- A1.2 Издърпване и създаване на проекти
- A1.3 Snapshotting
- A1.4 Клонове и сливане
- A1.5 Споделяне и обновяване на проекти
- A1.6 Инспекция и сравнение
- A1.7 Дебъгване
- A1.8 Patching
- A1.9 Email команди
- A1.10 Външни системи
- A1.11 Административни команди
- A1.12 Plumbing команди
2.5 Основи на Git - Работа с отдалечени хранилища
Работа с отдалечени хранилища
За да можете да сътрудничите в Git проекти, трябва да знаете как да управлявате отдалечените си хранилища. Отдалечените хранилища са версии на вашия проект, които се съхраняват някъде в корпоративната мрежа или в Интернет. Може да имате много от тях, като всяко от хранилищата може да е с права за вас само за четене или за четене/писане. Сътрудничеството с други разработчици изисква управление на тези отдалечени хранилища и издърпване/изпращане на данни от/към тях когато трябва да споделите работата си. Управлението на отдалечени хранилища включва умения за това как да добавяте такива, да премахвате хранилища, които вече не са валидни, управление на разнообразни отдалечени клонове код и дефинирането им като следени (tracked) или не и т.н. В тази секция разглеждаме някои от тези неща.
Забележка
|
Отдалечени хранилища могат да присъстват на локалната ви машина.
Напълно възможно е да работите с “отдалечено” хранилище, което в действителност се намира на същия хост. Думата “отдалечено” не означава непременно, че хранилището е някъде другаде в мрежата или в Интернет, тя означава че то просто е другаде. Работата с подобно хранилище все още си изисква всичките стандартни push/pull/fetch операции. |
Показване на отдалечените хранилища
За да видите кои отдалечени сървъри имате конфигурирани, използвайте командата git remote
.
Тя отпечатва съкратените имена на всяко отдалечено хранилище, което сте указали.
Ако сте клонирали отдалечено хранилище, трябва да видите в списъка поне елемента origin
— това е подразбиращото се име, което Git дава на сървъра, от който сте клонирали:
$ 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 пази за съответното кратко име на отдалеченото хранилище:
$ 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)
Това означава, че можем да издърпваме работата от всеки от тези потребители доста лесно. Може освен това да имаме права да изпращаме наш код към едно или повече от копията, въпреки че това не става ясно от тук.
Отбележете също, че тези отдалечени копия използват различни протоколи, ще обърнем повече внимание на това в [_getting_git_on_a_server].
Добавяне на отдалечени хранилища
Вече показахме как командата git clone
самичка създава origin
отдалеченото хранилище за вас.
Ето как да си добавите изрично отдалечено хранилище.
Командата 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)
Сега вече можете да ползвате краткото име pb, вместо целия отдалечен URL.
Например, ако искате да издърпате цялата информация, която Paul има, но все още не е в локалното ви хранилище, можете да използвате командата 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
клонът на Paul е достъпен локално за вас като pb/master
— можете да го слеете в някой от вашите клонове код или да превключите към него, ако желаете да го прегледате.
Ще разгледаме подробно какво са клоновете код и как да ги използваме в Клонове в Git.
Fetching и Pulling на данни от отдалечени хранилища
Както току що видяхте, извличането на данни от отдалечен проект се прави с:
$ git fetch <remote>
Командата се свързва с отдалечения сървър и изтегля всички данни за него, които все още нямате локално. След като направите това, ще имате указатели към всички клонове код на това отдалечено хранилище, така че да можете да ги инспектирате и слеете с локалните си клонове по всяко време.
Ако клонирате хранилище, командата git clone
автоматично го добавя като отдалечено под съкратеното име “origin”.
Така че, git fetch origin
изтегля всички нови данни от това хранилище, които са били добавени след като сте го клонирали (или последно актуализирали).
Важно е да се отбележи, че git fetch
само изтегля информацията в локалната ви база данни — тя не прави автоматично сливане с каквато и да било част от локалната ви работа и по никакъв начин не модифицира локалните файлове.
Вие сами трябва да направите това ръчно, когато сте готови.
Ако текущият ви клон код (branch) е настроен да проследява отдалечен клон (вижте следващата секция и Клонове в Git за повече информация), можете да използвате командата git pull
за автоматично изтегляне и сливане на данните от отдалечения клон в локалния.
Това може да е по-лесно и по-удобно за вас като работна последователност и по подразбиране, git clone
автоматично настройва локалния ви master
да следи отдалечения master
клон от сървъра, от който сте клонирали (или както се казва клонът по подразбиране на него).
Така че git pull
изтегля данните от сървъра, от който сте клонирали и автоматично се опитва да ги слее с кода, върху който работите в момента, спестявайки ви една ръчна стъпка по сливането.
Забележка
|
From git version 2.27 onward, If you want the default behavior of git (fast-forward if possible, else create a merge commit):
If you want to rebase when pulling:
|
Изпращане на данни към отдалечено хранилище
Когато работата ви стигне до статус, в който искате да я публикувате с другите разработчици от даден проект, можете да изпратите промените си към главното хранилище.
Командата за това е проста: git push <remote> <branch>
.
Ако искате да публикувате промените си от локалния master
клон към origin
сървъра (да кажем отново, клонирането обикновено настройва и двете кратки имена за вас автоматично), можете да изпълните следното:
$ git push origin master
Тази команда работи само ако, сте клонирали хранилището от отдалечен сървър, ако имате права за писане в него и ако никой междувременно не е изпратил към него нещо преди вас. Ако вие и някой друг сте клонирали едно и също хранилище и ако другият е изпратил обратно данни преди вас, то вашето изпращане правилно ще бъде отказано. Ще трябва първо да изтеглите работата на другия колега, да я слеете в локалното си копие и след това ще можете да изпратите към отдалечения сървър. Вижте Клонове в Git за повече подробности относно това как да изпращате към отдалечен сървър.
Преглед на отдалечено хранилище
Ако желаете повече информация за отдалечено хранилище, ползвайте командата git remote show <remote>
.
Ако я изпълните с определено кратко име като 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)
Показва се адреса на отдалеченото хранилище, както и информация за проследяването на клоновете.
Командата подсказва, че ако сте в локалния master
клон и изпълните git pull
, това автоматично ще го слее с промените в отдалеченoто хранилище след изтеглянето му.
Тя също така отпечатва и всички отдалечени референции, които са издърпани.
Това е прост пример, който е вероятно да срещнете.
Когато ползвате Git по-интензивно обаче, може да видите и доста повече данни от 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 pb paul
$ git remote
origin
paul
Това също променя и имената, под които се показват отдалечените проследявани клонове.
Този, който преди се казваше pb/master
сега е paul/master
.
Ако по някаква причина искате да премахнете отдалечено хранилище, например сменили сте сървъра или пък някое от огледалата или пък определен сътрудник не участва повече в проекта — можете да използвате командите git remote remove
или git remote rm
:
$ git remote remove paul
$ git remote
origin
Веднъж след като премахнете референция към отдалечено хранилище по този начин, всички remote-tracking клонове и конфигурационни настройки асоциирани с него, също се премахват.