AXV

Git asoslari: kodingiz tarixini boshqaring

Bugun terminalda birinchi repozitoriyni yaratamiz, commit qilamiz, shox ochamiz va birlashtiramiz

11-sinfProfessional IT development1-hafta · 2-dars

1-darsdan bugunga

Talab
Dizayn
Kod yozish
Test
SDLC ning «Kod» bosqichi Git repozitoriyda yashaydi: har o'zgarish izi bilan saqlanadi.

Bugun nima qilamiz?

Nega Git?

Versiyalarni boshqarish va snapshot g'oyasi

Repo va commit

init, add, commit, status, diff

Branch va merge

Parallel ish, konflikt, log

Natija: o'z dev-journal repozitoriyingiz, 3-darsda GitHub'ga yuklanadi.

01

Nega Git kerak?

Versiyalarni boshqarish tizimining g'oyasi

«final_v3_HAQIQIY» davri tugadi

Qo'lda versiyalash hisobot.docx hisobot_v2.docx hisobot_FINAL.docx hisobot_FINAL_haqiqiy2.docx Qaysi biri oxirgisi? Kim nimani o'zgartirdi? Git: bitta papka + tarix 1 2 3 Har nuqta = commit (snapshot) Istalganiga qaytish mumkin Kim, qachon, nima uchun yozilgan

Versiyalarni boshqarish tizimi (VCS)

Markazlashgan (SVN)

Tarix bitta serverda. Server ishlamasa, tarixga kira olmaysiz.
VS

Taqsimlangan (Git)

Har kompyuterda to'liq tarix. Internetsiz ham commit, branch, log ishlaydi.
Git (2005, Linus Torvalds, Linux yadrosi uchun) — buyruqlar vositasi. GitHub — alohida xizmat, uni 3-darsda o'tamiz.

Git raqamlarda

0
Git yaratilgan yil
0
commit hash (SHA-1)
0
working, staging, repository

Commit — kod fotosurati

commit 3280c5a hash:SHA-1 (40 belgi), noyob muallif:Aziz, vaqt xabar:«feat: add second line» snapshot:fayllarning to'liq holati parent:5284414 5284414 oldingi commit
02

O'rnatish va sozlash

Birinchi buyruqlar, o'zingizni Gitga tanishtirish

O'rnatganmiz-ku? Tekshiramiz


$ git --version
git version 2.50.1
$ git config --global user.name "Aziz Karimov"
$ git config --global user.email "[email protected]"
          

Commit muallifi shu ikki qiymatdan olinadi. Pastga ↓ o'rnatish va config darajalari

O'rnatish

Windows

git-scm.com dan installer; Git Bash terminali bilan keladi

macOS

git --version yoki Xcode CLT, yoki brew install git

Linux

sudo apt install git (Debian/Ubuntu)

Config uchta darajada

DarajaBayroqQamrovi
system--systembutun kompyuter
global--globalsizning foydalanuvchingiz
local(bayroqsiz)faqat shu repo, eng kuchli

$ git config --global init.defaultBranch main
$ git config --list --show-origin
          
03

Repozitoriy, 3 zona, commit

Git ishining asosiy sikli

git init: .git/ hosil bo'ladi

dev-journal/ README.md hello.py .git/ (yashirin) .git/ ichida objects/ commit va fayllar refs/ branch va tag nomlari HEAD qaysi shoxdasiz index staging zonasi config repo sozlamalari
.git/ ni o'chirsangiz, butun tarix yo'qoladi. Fayllar qoladi, lekin Git ularni endi bilmaydi.

Uch zona modeli

Working directory fayllarni tahrirlaysiz Staging area keyingi commit saflari Repository (.git) doimiy tarix git add git commit

Zonaning ustiga olib boring yoki bosing.

Birinchi commit


$ mkdir dev-journal && cd dev-journal
$ git init -b main
Initialized empty Git repository in .../dev-journal/.git/
$ echo "# Dev Journal" > README.md
$ git status -s
?? README.md
$ git add README.md
$ git commit -m "docs: add README"
[main (root-commit) bd42656] docs: add README
 1 file changed, 1 insertion(+)
          

?? = kuzatilmayapti (untracked). A = stagingda. Qator-qator tushuntiring.

git status -s: belgilarni o'qing

??

bosing

Yangi, Git kuzatmaydi

A

bosing

Yangi fayl stagingga qo'shildi

_M

bosing

O'zgardi, hali stagingda emas

M_

bosing

O'zgardi va stagingda


$ git diff            # ishchi papka va staging farqi
$ git diff --staged   # staging va oxirgi commit farqi
        

Commit xabari: avval


$ git commit -m "ozgardi"
        
Nima o'zgardi? Nega? 3 oydan keyin o'zingiz ham eslay olmaysiz.

Commit xabari: keyin


$ git commit -m "feat: add greeting by name"
        
feat: yangi imkoniyatfix: xato tuzatishdocs: hujjatrefactor: tuzilishtest: sinov

Conventional Commits: tur: qisqa tavsif. Buyruq maylida, 50 belgigacha.

O'zgartirdik, ko'rdik, saqladik


$ echo 'print("Ikkinchi qator")' >> hello.py
$ git diff
--- a/hello.py
+++ b/hello.py
@@ -1 +1,2 @@
 print("Salom, Git!")
+print("Ikkinchi qator")
$ git commit -am "feat: add second line"
$ git log --oneline
3280c5a feat: add second line
          
-a faqat allaqachon kuzatilayotgan fayllarni oladi. Yangi fayl uchun avval git add.
04

Branch, merge va tarix

Asosiy shoxga tegmasdan xavfsiz tajriba

Branch — mustaqil yo'lak

main feature/greeting merge

Branch — commit'ga ko'rsatkich (yorliq). Yaratish deyarli bepul va bir lahzada bo'ladi.

Shox ochamiz, ishlaymiz, qaytamiz


$ git switch -c feature/greeting
Switched to a new branch 'feature/greeting'
$ git commit -am "feat: greet by name"
[feature/greeting 245556f] feat: greet by name
$ git switch main
Switched to branch 'main'
$ git merge feature/greeting
Updating 3280c5a..245556f
Fast-forward
 hello.py | 4 ++--
$ git branch -d feature/greeting
          

Merge ikki xil bo'ladi

Fast-forward main orqada, yangi commitlar ustida Git faqat main'ni oldinga suradi Merge commit ikkala shox o'zgargan Git ikki ota-onali commit yaratadi

Konflikt: Git to'xtab, so'raydi


$ git merge feature/title
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
$ cat README.md
<<<<<<< HEAD
# Dasturchi kundaligi
=======
# Aziz Dev Journal
>>>>>>> feature/title
          

Bitta qatorni ikki shox turlicha o'zgartirgan. Pastga ↓ yechish tartibi

Konfliktni yechish

1. O'qing

Faylni oching, ikkala variantni o'qing

2. Tahrirlang

Qoldiradigan matnni yozing, <<< === >>> belgilarini o'chiring

3. Stagingga

git add README.md

4. Commit

git commit (merge'ni yakunlaydi)

Qo'rqmang: git merge --abort hammasini merge'dan oldingi holatga qaytaradi.

Tarixni o'qing: git log


$ git log --oneline --graph
*   79a25f9 Merge branch 'feature/bye'
|\
| * 03c5311 feat: add goodbye
* | d76ee7f docs: describe project
|/
* 245556f feat: greet by name
* 3280c5a feat: add second line
          
--oneline--graph--all-n 5git show <hash>

Xato qildim: qanday qaytaraman?

Ishchi o'zgarish

git restore hello.py
faylni oxirgi commit holatiga

Stagingdan olish

git restore --staged hello.py
fayl o'zgarishi saqlanadi

Commitni bekor

git revert <hash>
teskari commit, tarix buzilmaydi

git restore saqlanmagan o'zgarishni qaytarib bo'lmaydigan qilib o'chiradi.

Odatiy xatolar

Parolni commit qilish

Tarixdan o'chirish juda qiyin. Maxfiy fayllarni .gitignore ga yozing.

Noto'g'ri shoxda ishlash

Ish boshlashdan oldin git branch yoki git status.

git add . ko'r-ko'rona

Keraksiz fayl (node_modules, .env) tushadi. Avval status.

«fix» kabi xabar

Tarix foydasiz bo'lib qoladi. Nima va nega ekanini yozing.

Tezkor savol

hello.py ni o'zgartirdingiz, git add qilmadingiz va git commit -m "x" yozdingiz. Commitga nima tushadi?

To'g'ri: «nothing added to commit». Faqat stagingdagilar commitga tushadi. Variant: git commit -am kuzatiladigan faylni o'zi stagingga oladi.

Amaliyot: dev-journal 20 daqiqa

OsonRepo yarating, README.md va hello.py uchun 2 ta commit
O'rtafeature/skills shoxida skills.md yozing, main'ga merge qiling
QiyinAtaylab konflikt yarating va yeching, git log --graph bilan isbotlang

Xulosa

Bugun o'rgandik

init, add, commit; uch zona; branch, merge, konflikt; log va restore

Uyga vazifa

dev-journal ga 3 kunlik yozuv, shox va merge; log --graph natijasi

Keyingi dars: repozitoriyni GitHub'ga yuboramiz (remote, push, pull, fork).