.gitignore qo‘llanmasi: nimani e’tiborsiz qoldirish va shablonlar
Amaliyot3 daqInnovialabs tahririyati
Qisqacha
.gitignore Git ga qaysi kuzatilmaydigan fayllarni repozitoriyga qo‘shmaslikni aytadi: bog‘liqliklar, build natijalari, lokal sozlamalar va sirlar; allaqachon kommit qilingan fayllarga u ta’sir qilmaydi — ularni git rm --cached bilan olib tashlash kerak.
.gitignore nima qiladi
.gitignore — shablonlar ro‘yxati yozilgan matnli fayl. Ularga mos keladigan fayllarni Git git status da ko‘rsatmaydi va git add . orqali qo‘shmaydi.
Eslab qolish kerak bo‘lgan asosiy narsa: .gitignore faqat kuzatilmaydigan fayllar uchun ishlaydi. Agar fayl allaqachon kommit qilingan bo‘lsa, uni .gitignore ga qo‘shish hech narsani o‘zgartirmaydi — Git uni kuzatishda davom etadi.
Odatda nimalar e’tiborsiz qoldiriladi:
- bog‘liqliklar:
node_modules/,.venv/,Pods/; - build natijalari:
dist/,build/, keshlar; - lokal sozlamalar: IDE fayllari,
.DS_Store,Thumbs.db; - sirlar:
.env, kalitlar, sertifikatlar, keystore.
Nimalar e’tiborsiz qoldirilmaydi: manba kodi, lock-fayllar (package-lock.json, poetry.lock) va .env.example kabi konfig namunalari.
Shablonlar sintaksisi
| Shablon | Nimaga mos keladi |
|---|---|
debug.log | Shu nomdagi fayl yoki papka, istalgan darajada |
*.log | .log kengaytmali barcha fayllar |
build/ | Faqat build papkalari (oxiridagi slesh) |
/config.local.json | Faqat ildizda, shu .gitignore yonida |
docs/*.pdf | To‘g‘ridan-to‘g‘ri docs dagi PDF, ichki papkalarda emas |
**/temp | Istalgan chuqurlikdagi temp |
logs/** | logs papkasining butun ichidagisi |
a/**/b | a/b, a/x/b, a/x/y/b |
file?.txt | Aynan bitta istalgan belgi |
[abc].txt | To‘plamdan bitta belgi |
Ko‘pincha chalkashtiriladigan qoidalar:
*/dan o‘tmaydi. Ichki papkalarni qamrab olish uchun**kerak.- Shablonda slesh boshida yoki o‘rtasida bo‘lsa, u .gitignore turgan papkaga bog‘lanadi. Sleshsiz shablon istalgan darajada mos keladi.
#bilan boshlanadigan qatorlar — izohlar. Bo‘sh qatorlar hisobga olinmaydi.
Inkor va ichki fayllar
Undov belgisi ! oldingi shablon chiqarib tashlagan faylni qaytaradi:
*.env
!example.env
Tuzoq: agar butun papka chiqarib tashlangan bo‘lsa, undagi faylni qaytarib bo‘lmaydi. Git shunchaki ichkariga kirmaydi. Bunday ishlamaydi:
logs/
!logs/.gitkeep
Bunday esa ishlaydi — papkaning o‘zini emas, ichidagisini chiqarib tashlaymiz:
logs/*
!logs/.gitkeep
Ichki .gitignore fayllar. Istalgan ichki papkada o‘z .gitignore faylingiz bo‘lishi mumkin. Uning shablonlari shu papkaga nisbatan hisoblanadi, qoidalar to‘qnashganda esa chuqurroqdagi fayl ustun keladi.
.git/info/exclude — xuddi shu qoidalar, lekin fayl kommit qilinmaydi. Bitta repozitoriydagi shaxsiy istisnolar uchun mos.
Global gitignore
OS va muharriringiz qoldiradigan keraksiz fayllarni har bir repozitoriyda emas, barcha loyihalar uchun bir marta e’tiborsiz qoldirgan ma’qul:
git config --global core.excludesFile ~/.gitignore_global
U yerga .DS_Store, Thumbs.db, .idea/, .vscode/, *.swp yaxshi mos keladi. Loyiha .gitignore fayliga esa loyihaning o‘ziga va unda ishlaydigan hammaga tegishli narsalarni yozing.
Tayyor shablonlar
Node.js / frontend:
node_modules/
dist/
build/
.next/
coverage/
npm-debug.log*
.env
.env.*
!.env.example
Python:
__pycache__/
*.py[cod]
.venv/
venv/
*.egg-info/
dist/
build/
.pytest_cache/
.mypy_cache/
.env
Mobil (Android, iOS, Flutter):
# Android
.gradle/
build/
local.properties
*.jks
*.keystore
# iOS
xcuserdata/
DerivedData/
*.xcuserstate
# Flutter
.dart_tool/
iOS da Pods/ ni kommit qilish-qilmaslik — jamoa qarori; ikkala yondashuv ham uchraydi. Katta shablonlar to‘plami GitHub dagi github/gitignore repozitoriyida yuritiladi.
Allaqachon repozitoriyda bo‘lgan fayllarni olib tashlash
Fayl allaqachon kuzatilayotgan bo‘lsa, uni .gitignore ga qo‘shing va diskdan o‘chirmasdan indeksdan olib tashlang:
git rm --cached config.local.json
git rm -r --cached build/
git commit -m "Stop tracking local files"
Qaysi qoida ishlayotganini tekshirish: git check-ignore -v fayl/yo‘li.
Sirlar bilan bu yetarli emas. git rm --cached faylni faqat keyingi kommitlardan olib tashlaydi, tarixda esa u qoladi va repozitoriyga kirish huquqi bor har kim uni topa oladi. To‘g‘ri tartib:
- Kalit, parol yoki tokenni darhol bekor qiling va almashtiring. Uni oshkor bo‘lgan deb hisoblang.
- Faylni kuzatuvdan olib tashlang va .gitignore ga qo‘shing.
- Zarur bo‘lsa, tarixni qayta yozing (
git filter-repoyoki BFG Repo-Cleaner), force push qiling va jamoadan repozitoriyni qaytadan klonlashni so‘rang.
Sirni almashtirmasdan tarixni qayta yozish yordam bermaydi: repozitoriy nusxalari allaqachon tarqalgan bo‘lishi mumkin.
Sintaksis batafsil Git ning rasmiy hujjatlarida yozilgan.