10-bo‘lim
Masofaviy repozitoriylar
clone, remote, push, fetch va pull buyruqlari bilan serverdagi repozitoriy bilan ishlash.
Ushbu bo‘lim mundarijasi
Shu paytgacha hamma ish sizning kompyuteringizda edi. Endi kodni boshqalar bilan bo'lishishni o'rganamiz.
Masofaviy repozitoriy nima? #
Remote - internetdagi (yoki tarmoqdagi) Git repozitoriysi. Odatda GitHub, GitLab yoki kompaniyaning o'z serverida joylashadi.
Klonlash #
Mavjud repozitoriyni nusxalash:
git clone https://github.com/foydalanuvchi/loyiha.git
Cloning into 'loyiha'...
remote: Enumerating objects: 847, done.
remote: Counting objects: 100% (847/847), done.
remote: Compressing objects: 100% (412/412), done.
Receiving objects: 100% (847/847), 1.24 MiB | 3.15 MiB/s, done.
Resolving deltas: 100% (389/389), done.
# Boshqa nom bilan
git clone https://github.com/foydalanuvchi/loyiha.git mening-papkam
# Faqat oxirgi kommit (tez, lekin tarixsiz)
git clone --depth 1 https://github.com/foydalanuvchi/loyiha.git
# Ma'lum tarmoqni
git clone -b develop https://github.com/foydalanuvchi/loyiha.git
clone nima qiladi?Bitta buyruq to'rt ishni bajaradi:
- Papka yaratadi
git initqiladioriginnomli remote qo'shadi- Hamma narsani yuklab olib, asosiy tarmoqqa o'tadi
Butun tarix ham yuklanadi - internetsiz ham ishlashingiz mumkin.
Remote ro'yxati #
git remote
origin
git remote -v
origin https://github.com/foydalanuvchi/loyiha.git (fetch)
origin https://github.com/foydalanuvchi/loyiha.git (push)
# Batafsil
git remote show origin
* remote origin
Fetch URL: https://github.com/foydalanuvchi/loyiha.git
Push URL: https://github.com/foydalanuvchi/loyiha.git
HEAD branch: main
Remote branches:
main tracked
develop tracked
Local branch configured for 'git pull':
main merges with remote main
origin nima?Bu shunchaki nom - Git avtomatik shunday ataydi. Sehr yo'q.
Nomni o'zgartirish yoki bir nechta remote qo'shish mumkin:
git remote rename origin github
git remote add zaxira https://gitlab.com/.../loyiha.git
Remote qo'shish #
Lokal loyihani serverga bog'lash:
git remote add origin https://github.com/foydalanuvchi/loyiha.git
# URL ni o'zgartirish
git remote set-url origin git@github.com:foydalanuvchi/loyiha.git
# O'chirish
git remote remove origin
Push - yuborish #
git push origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 312 bytes | 312.00 KiB/s, done.
To https://github.com/foydalanuvchi/loyiha.git
c9d2e71..7d4e2f8 main -> main
Birinchi marta push qilganda kuzatuv o'rnatish kerak:
git push -u origin main
-u (--set-upstream) dan keyin shunchaki git push yozish yetarli.
# Yangi tarmoqni yuborish
git push -u origin feature/savat
# Barcha tarmoqlarni
git push --all origin
# Teglarni ham
git push --tags
! [rejected] main -> main (fetch first)
error: failed to push some refs
hint: Updates were rejected because the remote contains work that you do
hint: not have locally.
Bu serverda sizda yo'q kommitlar borligini bildiradi. Kimdir sizdan oldin push qilgan.
Yechim - avval tortib oling:
git pull
git push
Fetch - olib kelish (birlashtirmasdan) #
git fetch origin
remote: Enumerating objects: 12, done.
From https://github.com/foydalanuvchi/loyiha
7d4e2f8..3b9c1a4 main -> origin/main
* [new branch] feature/api -> origin/feature/api
Diqqat: origin/main yangilandi, lekin sizning main o'zgarmadi.
git status
On branch main
Your branch is behind 'origin/main' by 3 commits, and can be fast-forwarded.
# Nima kelganini ko'rish
git log main..origin/main --oneline
git diff main origin/main
fetch - eng xavfsiz buyruqU hech nimani o'zgartirmaydi, faqat ma'lumot olib keladi.
Ishonchsiz holatda har doim avval fetch qiling, nima kelganini ko'ring,
keyin merge qiling. Bu ko'p muammodan saqlaydi.
Pull - olib kelish va birlashtirish #
git pull origin main
pull = fetch + merge.
# Kuzatuv o'rnatilgan bo'lsa
git pull
Updating 7d4e2f8..3b9c1a4
Fast-forward
manba/api.php | 62 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
pull --rebase #
git pull --rebase
Bu fetch + rebase qiladi - keraksiz merge kommitlar yaratilmaydi.
# Doimiy sozlash
git config --global pull.rebase true
pull avtomatik merge qiladigit pull sizdan so'ramasdan merge qiladi. Konflikt bo'lsa - o'rtada
qolib ketasiz.
Ehtiyotkor ish uslubi:
git fetch
git log HEAD..origin/main --oneline # nima kelganini ko'ring
git merge origin/main # keyin birlashtiring
Kuzatuvchi tarmoqlar #
git branch -vv
* main 3b9c1a4 [origin/main] API qo'shildi
feature/savat 7d4e2f8 [origin/feature/savat: ahead 2] Savat mantiqi
local-test 5a8b3f0 Test tarmog'i
| Ma'lumot | Ma'nosi |
|---|---|
[origin/main] | Bu tarmoq origin/main ni kuzatadi |
ahead 2 | Sizda 2 ta yuborilmagan kommit bor |
behind 3 | Serverda 3 ta olinmagan kommit bor |
ahead 1, behind 2 | Ikkala tomonda ham yangilik bor |
| (bo'sh) | Kuzatuv o'rnatilmagan |
# Kuzatuvni o'rnatish
git branch --set-upstream-to=origin/main main
# Yoki push paytida
git push -u origin main
Masofaviy tarmoqlar #
git branch -r
origin/HEAD -> origin/main
origin/main
origin/develop
origin/feature/api
# Masofaviy tarmoq asosida lokal yaratish
git switch feature/api
Git buni avtomatik tushunadi: origin/feature/api mavjud bo'lsa,
shu nomdagi lokal tarmoq yaratib, kuzatuvni o'rnatadi.
# Aniq ko'rsatib
git switch -c feature/api origin/feature/api
O'chirish #
# Masofaviy tarmoqni o'chirish
git push origin --delete feature/eski
# Eski uslub
git push origin :feature/eski
# Serverda o'chirilgan tarmoqlarni lokal ro'yxatdan tozalash
git fetch --prune
# Doimiy yoqish
git config --global fetch.prune true
--prune ni yoqingJamoada ishlaganda git branch -r da o'nlab allaqachon o'chirilgan
tarmoqlar to'planib qoladi. fetch.prune true buni avtomatik tozalaydi.
HTTPS yoki SSH? #
| HTTPS | SSH | |
|---|---|---|
| URL | https://github.com/... | [email protected]:... |
| Sozlash | Oson | Kalit yaratish kerak |
| Har safar parol | Ha (yoki menejer) | Yo'q |
| Korporativ tarmoqda | Odatda ishlaydi | Bloklangan bo'lishi mumkin |
Keyingi bo'limda SSH kalit yaratishni ko'ramiz.
# HECH QACHON SHUNDAY QILMANG
git remote add origin https://login:[email protected]/user/repo.git
Parol .git/config faylida ochiq matnda saqlanadi va tasodifan
ulashilishi mumkin.
To'g'ri yechim - SSH kalit yoki Git Credential Manager.
Bir nechta remote #
git remote add upstream https://github.com/asl-loyiha/loyiha.git
git remote -v
origin https://github.com/men/loyiha.git (fetch)
origin https://github.com/men/loyiha.git (push)
upstream https://github.com/asl-loyiha/loyiha.git (fetch)
upstream https://github.com/asl-loyiha/loyiha.git (push)
# Asl loyihadan yangilanish olish
git fetch upstream
git merge upstream/main
Bu fork bilan ishlashda kerak - 12-bo'limda batafsil ko'ramiz.
Kundalik ish oqimi #
# 1. Kunni boshlaganda
git switch main
git pull
# 2. Yangi vazifa
git switch -c feature/hisobot
# 3. Ishlash va kommit qilish
git add .
git commit -m "Hisobot sahifasi yaratildi"
# 4. Serverga yuborish
git push -u origin feature/hisobot
# 5. Ish davomida yana kommit
git commit -am "Hisobotga filtr qo'shildi"
git push
# 6. main dagi yangiliklarni olish
git fetch origin
git merge origin/main
- GitHub da bo'sh repozitoriy yarating (hisob bo'lmasa - keyingi bo'limda).
- Lokal loyihangizga
git remote add origin ...qiling. git push -u origin mainbilan yuboring.- GitHub saytida fayllar paydo bo'lganini tekshiring.
- GitHub saytida
README.mdni to'g'ridan-to'g'ri tahrirlang va kommit qiling. - Lokal
git fetchqiling -origin/mainyangilanganini ko'ring. git statusda "behind 1 commit" yozuvini ko'ring.git pullbilan o'zgarishni oling.git branch -vvbilan kuzatuv holatini ko'ring.- Yangi tarmoq yaratib push qiling, keyin uni serverdan o'chiring.
Xulosa #
git clone- mavjud repozitoriyni to'liq tarixi bilan nusxalaydi.origin- shunchaki standart nom, o'zgartirish mumkin.git push -u origin main- birinchi marta yuborishda kuzatuvni o'rnatadi.git fetch- olib keladi, lekin birlashtirmaydi (eng xavfsiz).git pull=fetch+merge.git pull --rebasetarixni chiziqli saqlaydi.git branch -vv- qaysi tarmoq nechta kommitga oldinda/ortda ekanini ko'rsatadi.git fetch --pruneo'chirilgan masofaviy tarmoqlarni tozalaydi.- Parolni URL ichida hech qachon saqlamang.
Keyingi bo'limda GitHub bilan to'liq tanishamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.