Diff — ikki matn, fayl holati yoki commit orasidagi farqni satr va bloklar ko‘rinishida ifodalash usuli. Git diff working tree, staging area, commit va branchlar orasidagi o‘zgarishlarni ko‘rsatadi. Diff review, debugging, patch yaratish va aynan nima o‘zgarganini tekshirishning asosiy vositasidir.
Unified diff formati
Unified diff eski va yangi fayl nomi, hunk koordinatasi hamda kontekst satrlarini beradi. - bilan boshlangan satr olib tashlangan, + bilan boshlangan satr qo‘shilgan.
-timeout = 10
+timeout = 30
Bu belgilar faylning haqiqiy qismi emas. Hunk header eski va yangi diapazonni ko‘rsatadi. Kontekst patchni to‘g‘ri joyga qo‘llash va insonga atrofdagi mantiqni tushunishga yordam beradi.
Git holatlari orasidagi diff
git diff default bo‘yicha working tree bilan staging area orasini ko‘rsatadi. git diff --staged staging area bilan oxirgi commitni solishtiradi. Commit qilishdan oldin ikkala buyruq tekshirilsa, stage qilingan va qilinmagan o‘zgarishlar ajratiladi.
git diff A B ikki commit tree’sini to‘g‘ridan-to‘g‘ri solishtiradi. A..B va A...B sintaksisining ma’nosi buyruqqa bog‘liq; diffdagi uch nuqta ko‘pincha merge base bilan Bni solishtiradi. Pull request diffi hosting platformasining merge-base qoidalariga tayanishi mumkin.
Rename aniqlash
Git fayl rename’ini alohida doimiy metadata sifatida saqlamaydi. Diff vaqtida o‘chirilgan va qo‘shilgan fayl mazmuni o‘xshashligiga qarab rename deb aniqlanadi. Fayl ko‘chirilib bir vaqtda keskin tahrirlansa, rename aniqlanmasligi mumkin.
Whitespace o‘zgarishi mazmunli diffni shovqin bilan to‘ldiradi. Mos option whitespace’ni vaqtincha e’tiborsiz qoldirishi mumkin, ammo Python kabi indent semantik bo‘lgan tilda ehtiyot kerak. Formatter o‘zgarishi funksional commitdan alohida saqlansa review osonlashadi.
Binary diff
Oddiy Git binary fayl uchun satrli farq ko‘rsatmaydi. Rasm, hujjat yoki generated artefaktga maxsus diff driver yoki tashqi viewer qo‘llanishi mumkin. Git LFS pointer fayli o‘zgarishini ko‘rsatadi, haqiqiy katta obyekt farqi alohida vosita talab qiladi.
Patch
Diff patch sifatida boshqa tree’ga qo‘llanishi mumkin. git apply patchni working treega, git am email patchdagi commit metadata bilan qo‘llaydi. Kontekst mos kelmasa patch rad etiladi yoki conflict qo‘lda hal qilinadi.
Diff semantik to‘g‘rilikni ko‘rsatmaydi. Bir satrlik permission o‘zgarishi katta xavfsizlik ta’siriga, ming satrlik generated lockfile esa kichik dependency yangilanishiga tegishli bo‘lishi mumkin. Review kod konteksti, test va talab bilan birga bajariladi.
Matnni taqqoslash cheklovlari
Diff algoritmi dastur semantikasini emas, asosan satrlar ketma-ketligini ko‘radi. Funksiyani boshqa faylga ko‘chirish katta o‘chirish va qo‘shish sifatida chiqishi, formatlash esa mazmuniy o‘zgarishni shovqin orasida yashirishi mumkin. Shu bois review oldidan avtomatik formatter alohida commitda ishlatilishi yoki whitespace o‘zgarishlari maxsus parametr bilan vaqtincha e’tibordan chetda qoldirilishi mumkin. Generated fayl diffi ko‘pincha manba fayldagi haqiqiy o‘zgarishni takrorlaydi; loyiha siyosati uni repositoryda saqlash kerakligini belgilaydi. Diff foydali dalil, lekin test natijasi va ishga tushirilgan dastur xatti-harakatining o‘rnini bosmaydi.
Diff ko‘lamini commit, katalog yoki fayl bilan cheklash reviewni osonlashtiradi. Biroq faqat tanlangan parchani ko‘rish bog‘liq konfiguratsiya o‘zgarishini yashirishi mumkin. Reviewer umumiy statistikani, fayllar ro‘yxatini va zarur joyda to‘liq kontekstni birgalikda tekshiradi.
Bog‘liq tushunchalar
Git, patch, working tree, staging area, commit, merge base, code review