-
1. Почеток
- 1.1 За верзиска контрола
- 1.2 Кратка историја на Git
- 1.3 Основи на Гит
- 1.4 Командната линија
- 1.5 Инсталирање на Git
- 1.6 First-Time Git Setup
- 1.7 Getting Help
- 1.8 Заклучок
-
2. Основите на Git
-
3. Гранење во Git
- 3.1 Гранење објаснето
- 3.2 Основно разгранување и спојување
- 3.3 Branch Management
- 3.4 Работни процеси
- 3.5 Далечински гранки
- 3.6 Ребаза
- 3.7 Заклучок
-
4. Git на Сервер
- 4.1 Протоколите
- 4.2 Добивање на Git на сервер
- 4.3 Генерирање на вашиот SSH јавен клуч
- 4.4 Поставување на серверот
- 4.5 Гит демон
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Опции за домаќини на трети лица
- 4.10 Заклучок
-
5. Дистрибуиран Git
- 5.1 Дистрибуирани работни процеси
- 5.2 Придонес кон проект
- 5.3 Приватен мал тим
- 5.4 Одржување на проект
- 5.5 Заклучок
-
6. GitHub
-
7. Git Алатки
- 7.1 Revision Selection
- 7.2 Интерактивно стажирање
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Напредно спојување
- 7.9 Rerere
- 7.10 Дебагирање со Git
- 7.11 Submodules
- 7.12 Збивање
- 7.13 Заменување
- 7.14 Складирање на ингеренции
- 7.15 Заклучок
-
8. Персонализација на Git
- 8.1 Git Configuration
- 8.2 Git Атрибути
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Заклучок
-
9. Git и други системи
- 9.1 Git како Клиент
- 9.2 Мигрирање кон Git
- 9.3 Заклучок
-
10. Внатрешноста на Git
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Заклучок
-
A1. Appendix A: Git во други околини
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Заклучок
-
A2. Appendix B: Вметнување на Git во вашите апликации
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
-
A3. Appendix C: Git команди
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
3.5 Гранење во Git - Далечински гранки
Далечински гранки
Далечните референции се референци (покажувачи) во оддалечените репозиториуми, вклучувајќи ги гранките, таговите и така натаму.
Можете да добиете целосна листа на далечински референци експлицитно со git ls-remote [remote]
или
git remote show [remote] `за далечински гранки, како и повеќе информации.
Сепак, почесто е да ги искористиме гранките за следење на далечина.
Ограноци за следење на далечина се референци за состојбата на оддалечените гранки. Тие се локални референци кои не можете да ги преместите; Git ги придвижува за вас секогаш кога ќе направите некоја мрежна комуникација, за да бидете сигурни дека тие точно ја претставуваат состојбата на далечинското складиште. Помислете ги како обележувачи, за да ве потсетам каде што филијалите во оддалечените складишта беа последниот пат кога сте се поврзавте со нив.
Гранките за следење на далечина се во формата <далечински> / <филијала>
.
На пример, ако сакавте да видам што "господар" филијала на вашиот "потекло" далечински изгледаше како последен пат кога сте го комуницирале со тоа, ќе ја проверите гранката "потекло / господар".
Доколку работевте на некое прашање со партнер и тие го натераа грантот iss53
, може да имате своја сопствена локална` iss53` филијала, но филијалата на серверот ќе биде претставена од филијалата за далечинско следење `потекло / iss53 `.
Ова може да биде малку збунувачки, па ајде да погледнеме пример.
Да речеме дека имаш Git сервер во твојата мрежа на git.ourcompany.com
.
Ако клонирате од ова, командата клон
на Git автоматски го именува` потекло` за вас, ги симнува сите свои податоци, создава покажувач до тоа каде е нејзината господарна гранка
и именува тоа` потекло / господар` локално.
Git, исто така, ви дава своја локална мастер
филијала која започнува на истото место како гранка на" мајсторот "на потеклото, така што од вас има нешто да се работи.
Исто како што името на гранката “master” нема посебно значење во Git, ниту "origin".
Додека “master” е стандардното име за почетна гранка кога ќе стартувате git init
, што е единствената причина што е широко користен,` origin'' е стандардното име за далечинскиот управувач кога извршувате `git clone
.
Ако извршите git clone -o booyah
наместо, тогаш ќе имате booyah/master
како вашата стандардна далечинска гранка.
Ако направите некоја работа на вашата локална господар
гранка, а во меѓувреме некој друг турка до` git.ourcompany.com` и ја ажурира својата master
гранка, тогаш вашите истории се движат напред поинаку.
Исто така, додека не сте во контакт со вашиот потекло сервер, вашиот "origin/master" покажувач не се движи.
За да ја синхронизирате вашата работа, извршувате команда git fetch origin
.
Оваа команда се осврнува на кој "потекло" на серверот е (во овој случај, тоа е git.ourcompany.com
), добива какви било податоци од него, кои сеуште не ги имате, и ја ажурира вашата локална база на податоци, преместувајќи го вашето origin/master
покажувач на неговата нова, посовремена позиција.
git fetch
updates your remote referencesЗа да покажете дека имате повеќе далечински сервери и што изгледаат оддалечените филијали за тие оддалечени проекти, да претпоставиме дека имате друг внатрешен Git сервер кој се користи само за развој од еден од вашите спринтови тимови.
Овој сервер е на git.team1.ourcompany.com
.
Можете да го додадете како нова оддалечена референца за проектот во којшто моментално работите со извршување на командата git remote add
, како што се опфатени во глава Основите на Git.
Наведете го ова далечинско "teamone", кое ќе биде вашето кратко име за целата УРЛ-адреса.
Сега, можете да го стартувате git fetch teamone
за да донесат сè што далечинскиот сервер` teamone` го има што уште немате.
Бидејќи тој сервер има подмножество на податоците што ги има серверот "origin" сега, Git не добива никакви податоци, туку поставува филијала за следење на далечина наречена teamone / master
за да укаже на извршувањето кое` teamone` го има како master
гранка.
.Remote tracking branch for teamone/master
image::images/remote-branches-5.png[Remote tracking branch for teamone/master
.]
Pushing
Кога сакате да споделите гранка со светот, треба да го притиснете на далечинскиот управувач до кој имате пристап за запишување. Вашите локални гранки не се автоматски синхронизирани со дистанционерите што ги пишувате - мора експлицитно да ги притиснете гранките што сакате да ги споделите. На тој начин можете да користите приватни ограноци за работа што не сакате да ги споделите и да ги зголемите само гранките на тема што сакате да соработувате.
Ако имате филијала наречена serverfix
со која сакате да работите со други, можете да го притиснете на истиот начин како што ја турнавте вашата прва гранка.
Извршите git push <remote> <branch>
:
$ git push origin serverfix
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
* [new branch] serverfix -> serverfix
Ова е малку кратенка.
Git автоматски го проширува името на serverfix
branchname на` refs / heads / serverfix: refs / heads / serverfix`, што значи: Земете ја локалната гранка на серверот за фикс и притиснете ја за да ја ажурирам филијалата на серверот. ''
Детално ќе го прочитаме деталот `refs / heads /
во << ch10-git-internals >>, но обично може да го исклучите.
Исто така можете да го направите git push source source serverfix: serverfix
, што го прави истото - вели:` Земете го мојот серверски код и направете го серверот за далечинскиот управувач .
Можете да го користите овој формат за да им помогнам на локалната гранка во оддалечена гранка која е поинаква именувана.
Ако не сакате да се нарекува serverfix
на далечинскиот управувач, наместо тоа, можете да го стартувате` git push origin serverfix: awesomebranch` за да го притиснете вашиот локален serverfix
филијала во гранката` awesomebranch` на оддалечениот проект.
Note
|
Не ја пишувајте вашата лозинка секогаш |
Ако користите URL на HTTPS за да извршите пренасочување, серверот Git ќе ве праша за вашето корисничко име и лозинка за автентикација. Стандардно ќе ве поттикне на терминалот за овие информации, па серверот може да каже дали ви е дозволено да притиснете.
Ако не сакате да го внесувате секој пат кога ќе притиснете, можете да поставите ‘` кеш за проверка '’.
Наједноставниот е само да го задржите во меморија за неколку минути, што лесно можете да го поставите со извршување на git config --global credential.helper cache
.
За повеќе информации за различните кеширање опции достапни, погледнете << _credential_caching >>.
Следниот пат кога еден од твоите соработници ќе се подигне од серверот, ќе добиете референца каде верзијата на серверот за serverfix
е под оддалечената гранка` origin / serverfix`:
$ git fetch origin
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/schacon/simplegit
* [new branch] serverfix -> origin/serverfix
Важно е да се напомене дека кога ќе направите донежје што ги намалува новите гранки за следење на далечина, немате автоматски локални копии што можат да се едитираат.
Со други зборови, во овој случај, немате нова branchfix
гранка - имате само" потекло / серверфикс "покажувач што не можете да го модифицирате.
За да се спои оваа работа во вашата тековна работна гранка, можете да го стартувате git merge origin / serverfix
.
Ако сакате своја сопствена "branchfix" подружница на која може да работите, можете да го засновате на филијалата за следење на далечина:
$ git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
Ова ви дава локална гранка дека можете да работите на тој почеток каде што е "потеклото / серверот".
Tracking Branches
Проверка на локална гранка од филијала за далечинско следење автоматски го создава она што се нарекува ‘` филијала за следење ’ (а гранката што ја следи се нарекува `` низводно гранка ').
Следните гранки се локални гранки кои имаат директна врска со оддалечената гранка.
Ако сте во филијала за следење и напишете git pull
, Git автоматски знае од кој сервер да преземе и која гранка да се спои.
Кога клонирате складиште, тој генерално автоматски создава господар
гранка што ги следи потеклото / господарот.
Сепак, можете да поставите други филијали за следење ако сакате - оние кои ги следат гранките на други далечински управувачи или не ги следат "господарните" филијали.
Едноставниот случај е примерот што го видовте, извршувајќи checkout git-b <branch> <remote> / <branch>
.
Ова е честа операција што Git го обезбедува "--track" стенографијата:
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
Всушност, ова е толку вообичаено што има дури и кратенка за таа кратенка. Ако името на филијалата што се обидувате да ја проверите (а) не постои и (б) точно одговара на име на само еден далечински управувач, Git ќе создаде филијала за следење за вас:
$ git checkout serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
За да поставите локална филијала со друго име од оддалечената гранка, можете лесно да ја користите првата верзија со различно име на локална гранка:
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'
Сега, вашата локална филијала sf
автоматски ќе се повлече од` потекло / serverfix`.
Ако веќе имате локална подружница и сакате да ја поставите на оддалечена гранка што сте ја изгубиле, или сакате да ја промените гранката на нагорниот тек што ја следите, можете да ги користите -u
или` -set-upstream-to опција за
git branch` за експлицитно да го поставите во секое време.
$ git branch -u origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Note
|
Upstream shorthand
Кога ќе поставите филијала за следење, можете да ја повикате нејзината возводно гранка со |
Ако сакате да видите кои филијали за следење сте поставиле, можете да ја користите опцијата -vv
на` git branch`.
Ова ќе ги наведе вашите локални ограноци со повеќе информации, вклучувајќи го она што секоја гранка ја следи и дали вашата локална гранка е напред, позади или и двете.
$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
testing 5ea463a trying something new
Значи тука можеме да видиме дека нашата iss53
филијала следи` потекло / iss53` и е напред`
од две, што значи дека имаме две локални обврски кои не се туркаат на серверот.
Ние исто така можеме да видиме дека нашата господар
гранка следи` потекло / господар` и е актуелна.
Следно можеме да видиме дека нашата branchfix
гранка ја следи гранката` server-fix-good` на нашиот teamone
сервер и е понапред од три и зад себе по една, што значи дека постои една обврска на серверот што не сме се спои во уште и три се обврзуваат локално дека не сме се наметнувале.
Конечно можеме да видиме дека нашата "тестирање" гранка не следи било која оддалечена гранка.
Важно е да се напомене дека овие броеви се само откако последен пат сте зеле од секој сервер. Оваа команда не допира до серверите, тоа ви го кажува за она што има кеширано од овие сервери локално. Ако сакате целосно ажурирани напред и зад броеви, ќе треба да превземете од сите ваши далечински управувачи веднаш пред да го стартувате ова. Вие би можеле да го направите тоа вака:
$ git fetch --all; git branch -vv
Повлекување
Додека командата git fetch
ќе ги симне сите промени на серверот што немате уште, нема да го модифицираат вашиот работен директориум воопшто.
Тоа едноставно ќе ги добие податоците за вас и ќе ви овозможи да го споите сами.
Сепак, постои команда наречена git pull
, која во суштина е` git fetch` веднаш проследена со git спојување
во повеќето случаи.
Ако имате филијала за следење поставена како што е покажано во последниот дел, или со експлицитно поставување или со тоа што ќе го создаде за вас од командите clone
или` checkout`, git pull
ќе го пронајде она што серверот и го разгранува вашиот тековната гранка следи, преземи од тој сервер и потоа се обидува да се спои во таа оддалечена гранка.
Општо земено, подобро е едноставно да ги користите командите fetch
и` merge` експлицитно како магијата на git pull
често може да биде збунувачка.
Бришење на оддалечените филијали
Да претпоставиме дека сте завршиле со оддалечена гранка - велат дека вие и вашите соработници се завршени со карактеристика и сте ги споиле во "господарната" гранка на вашиот далечински управувач (или каква и да е филијалата на вашата стабилна кодирана).
Можете да избришете оддалечена гранка со помош на --delete
опцијата за` git push`.
Ако сакате да ја избришете вашата "серверска филијала" од серверот, го извршите следново:
$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
- [deleted] serverfix
Во суштина сето ова не е да се отстрани покажувачот од серверот. Серверот Git генерално ќе ги чува податоците таму додека трае собирањето на ѓубрето, па ако е случајно избришано, често е лесно да се опорави.