-
1. Иш бошланиши
- 1.1 Талқинларни бошқариш ҳақида
- 1.2 Git нинг қисқача тарихи
- 1.3 Git асоси
- 1.4 Командалар сатри
- 1.5 Git ни ўрнатиш
- 1.6 Git да биринчи созлашлар
- 1.7 Қандай ёрдам олиш мумкин?
- 1.8 Хулосалар
-
2. Git асослари
-
3. Git да тармоқланиш
-
4. Git серверда
- 4.1 The Protocols
- 4.2 Getting Git on a Server
- 4.3 Sizning SSH ochiq (public) kalitingizni generatsiyalash
- 4.4 Setting Up the Server
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Third Party Hosted Options
- 4.10 Хулосалар
-
5. Distributed Git
- 5.1 Distributed Workflows
- 5.2 Contributing to a Project
- 5.3 Maintaining a Project
- 5.4 Summary
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Qism modullar (Submodule)
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
- 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 Summary
-
A1. Appendix A: Git in Other Environments
- 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 Summary
-
A2. Appendix B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Git Commands
- 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
2.5 Git асослари - Узоқ масофадаги омборлар билан ишлаш
Узоқ масофадаги омборлар билан ишлаш
Қайсидир Git – лойиҳа билан ҳамкорликда ишлаш учун узоқ масофадаги омборни қандай бошқариш кераклигини билиш зарур. Узоқ масофадаги омборлар – бу интернетда ёки яна тармоқда қаердадир сақланадиган лойиҳанинг ўзгаришлари. Улар бир қанча бўлиши ва қоидага биноан уларнинг ҳар бири сизга ё фақат ўқиш ё ўқиш ва ёзиш имкони билан берилиши мумкин. Ҳамкорликда ишлаш узоқ масофадаги омборни бошқаришни, маълумотлар алмашинуви керак бўлганда унга маълумот юбориш (push) ва ундан маълумот қабул қилишни (pull) ўз ичига олади. Узоқ масофадаги омборларни бошқариш узоқ масофадаги омборларни қўшишни, улардан амалда қўлланилмайдиганларини ўчиришни, турли хил узоқ масофадаги тармоқланишларни бошқаришни билиш ва уларни кузатилувчилар (tracked) тарзида ажратишни ёки ажратмасликни ва бошқа шу каби амалларни қамраб олган. Ушбу бўлим узоқ масофадаги омборни бошқариш юзасидан барча санаб ўтилган малакаларни ёритади.
Узоқ масофадаги омборларингизни намойиш қилиш
Қайси узоқ масофадаги серверлар сизда созланганлигини кўришни истасангиз 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
Қайси URL га Git да қисқа ном мос келишини кўриш учун командада -v
опциясини кўрсатиш мумкин:
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
Агар узоқ масофадаги омборлар сизда бирдан зиёд бўлса, команда уларни барчасини кўрсатади. Масалан, Grit омбори қуйидаги тарзда кўринади.
$ 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)
Бу ушбу фойдаланувчиларнинг ихтиёрийсидан онсонгина ўзгаришларни қабул қилишимиз мумкинлигини билдиради. Биз қўшимча тарзида бир ёки ундан кўпларига push командасини ишлатишига ҳуқуқ беришимиз мумкин. Бироқ биз бу ҳақда бу ерда гаплашмаймиз.
Айтиш жоизки ушбу узоқ масофадаги омборлар турли хил протоколлардан фойдаланаябди; Биз булар ҳақида батафсилроқ маълумотларни Getting Git on a Server да берамиз.
Узоқ масофадаги омборларни қўшиш
Бундан олдинги бўлимларда мен узоқ масофадаги омборларни қўшишни озгина намойиш ҳам қилгандим энди уни батафсилроқ кўриб чиқамиз.
Узоқ масофадаги Git – омборни қўшиш ва мурожатда онсон бўлишига қисқа ном билан қўшиш учун 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)
Энди сиз командалар сатрида тўлиқ URL ўрнига pb
номини ишлатишингиз мумкин.
Масалан, сизда мавжуд бўлмаган Павлнинг омборидаги барча маълумотларни чиқариб олишни (fetch) хоҳласангиз 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
каби жойлашган. Сиз уни текширмоқчи бўсангиз ушбу тармоққа ўтишингиз ёки ўзингизни тармоқларингиздан бири билан бирлаштиришингиз (merge) мумкин.
(Биз тармоқлар нима уларни қандай ишлатиш мумкин ва улар ҳақдаги батафсил маълумотларни Git да тармоқланиш да кўриб ўтамиз.)
Сизнинг узоқ масофадаги омборларингиз устида Fetch ва Pull командаларини бажариш
Сиз хозир кўрганингиздек узоқ масофадаги лойиҳалардан маълумотларни олиш учун қуйидаги командани бажариш керак экан:
$ git fetch [remote-name]
Ушбу команда кўрсатилган узоқ масофадаги лойиҳа билан боғланади ва у лойиҳадан сизда ҳали йўқ бўлган барча маълумотларни олади. Командани бажарганингиздан кейин сизда ушбу узоқ масофадаги лойиҳадан барча тармоқларга мурожатлар пайдо бўлиши керак. Энди ушбу тармоқлар ихтиёрий вақт кўрилиши ёки бирлаштирилиши мумкин.
Сиз омборни клонлаштирган вақтингизда clone командаси автоматик тарзда ушбу узоқ масофадаги омборни “origin” номи билан қўшиб қўяди.
Шу тарзда git fetch origin
командаси барча қилинган ишларнинг серверга жўнатилганларини(push) сиз клонлаштирганингиздан сўнг (ёки fetch ёрдамида ўзгаришлар олинганда) тортиб олади.
Таъкидлаш муҳимки, git fetch
командаси маълумотларни сизни маҳаллий омборингизга олади, лекин уларни сиз қилиб турган ишингиз устига ташламайди ва уларни ўзгартирмайди.
Сиз бу маълумотларни ўз маълумотларингиз билан бирлаштиришингиз учун сиз шунга тайёр бўлган вақтингизда ўз қўлингиз билан бажаришингиз керак бўлади.
Агар сизда узоқ масофадаги тармоқни қўшимча маълумот учун навбатдаги бўлим ва Git да тармоқланиш га қаранг) кузатувчи тармоқ бўлса унда сиз git pull
командасини ишлатишингиз мумкин.
Ушбу услуб сиз учун анча онсон ва анча қулай бўлиши мумкин. Шунингдек, git clone
командаси одатда, ўзгаришсиз ҳолатда сизни маҳаллий master тармоғингизни сиз клонлаштирган узоқ масофадаги master тармоғини кузатишга созлаб қўяди (узоқ масофадаги омборда master тармоғи бор дея фараз қилинмоқда).
git pull
командасини ишлатиш, қоидага асосан сервердан маълумотларни юклаб олади ва уларни айни дамда сиз ишлаб турган код билан бирлаштиришга (merge) ҳаракат қилади.
Сизнинг узоқ масофадаги омборларингизга Push командасини ишлатиш
Қачон сиз ўзингизни қилган ишларингизни бошқалар билан улашмоқчи бўлсангиз уларни асосий маълумотлар омборига юборишингиз (push) керак. Ушбу амаллар учун команда жуда оддий: git push [узоқ масофадаги сервер] [тармоқ]
.
Сизни master тармоғингизда қилган ишларингизни origin
серверига жўнатишингиз учун (такрорлаб ўтамиз, клонлаштириш қоидага асосан ушбу икки номни автоматик тарзда созлаб қўяди) қуйидаги командаларни бажаришингиз мумкин:
$ git push origin master
Ушбу команда сиз клонлаштириб олган узоқ масофадаги омборга ёзиш ҳуқуқингиз бор бўлса ва шу вақтга қадар ҳеч ким push командасини ишлатмаган бўлса ишлайди. Агар сиз ва бошқа биров бир вақтда омборни клонлаштириб олиб, сўнгра у push командасини бажарса ва шундан сўнг сиз ҳам push командасини бажармоқчи бўлсангиз сизни командангиз инкор қилинади. Сиз аввал (pull) командасини бажариб ўзгаришларни ўзингизни омборингизга бирлаштиришингиз керак бўлади. Фақат шундан сўнг сизга push командасини бажаришга руҳсат берилади. Git да тармоқланиш бўлимга қаранг агарда узоқ масофадаги серверга маълумотларни жўнатиш ҳақида батафсилроқ маълумот олишни хоҳласангиз.
Узоқ масофадаги омборларни назорат қилиш
Агар сиз бирор узоқ масофадаги омбор ҳақида кўпроқ маълумот олишни истасангиз сиз қуйидаги командани бажаришингиз мумкин: git remote show [узоқ масофадаги сервер]
command.
Агар сиз ушбу командани бирор бир ном билан бажарсангиз, масалан, 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
командасини бажарганингизда узоқ масофадаги омбор тармоғи ўзгаришлари сизни тармоғингизга зарур бўлган маълумотлар олиниши билан қуйилиши ва бирлаштирилишини таъкидлаб ўтади.
У шунингдек олинган барча гипер мурожаатлар рўйҳатини кўрсатади.
Бу оддий ҳол учун мисол эди ва балким сиз ҳам шунга ўхшашига дуч келган бўлсангиз керак.
Бироқ, агар сиз 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
ёрдамида амалга оширишингиз мумкин:
$ git remote rename pb paul
$ git remote
origin
paul
Айтиш жоизки бу шунингдек узоқ масофадаги омбор тармоқлари номини ҳам ўзгартирган бўлади.
Энди pb/master
номлар paul/master
га алмашган бўлади.
Агар сиз қайсидир сабабга кўра мурожаатни ўчирмоқчи бўлсангиз (сиз серверни ўзгартирдингизми ёки бошқа ушбу омбор мурожаатини ишлатмаябсизми ёҳуд ушбу мурожаатга тегишли омбор фаолдиги тугатилган) git remote rm
ни ишлатишингиз мумкин:
$ git remote rm paul
$ git remote
origin