6-bo‘lim
Fayllarni boshqarish va .gitignore
Fayllarni o'chirish, ko'chirish, nomini o'zgartirish va keraksiz fayllarni .gitignore bilan chetlab o'tish.
Ushbu bo‘lim mundarijasi
- Faylni o'chirish
- Kuzatuvdan chiqarish, lekin diskda qoldirish
- Papkani o'chirish
- Nomini o'zgartirish va ko'chirish
- .gitignore
- Shablon qoidalari
- Allaqachon kuzatilayotgan fayl
- Tekshirish
- Bo'sh papka masalasi
- Global .gitignore
- Tayyor shablonlar
- .gitattributes
- Fayllarni vaqtincha e'tiborsiz qoldirish
- Toza holatga keltirish
- Xulosa
Loyiha o'sgani sari fayllarni ko'chirish, o'chirish va ba'zilarini umuman Git dan yashirish kerak bo'ladi.
Faylni o'chirish #
git rm eski-fayl.txt
git status
On branch main
Changes to be committed:
deleted: eski-fayl.txt
git commit -m "Ishlatilmaydigan fayl o'chirildi"
rm va git rm farqiOddiy rm fayl.txt bilan o'chirsangiz, keyin git add fayl.txt yoki
git add -A qilish kerak bo'ladi.
git rm ikkalasini birga bajaradi: faylni diskdan o'chiradi va
o'chirishni sahnaga qo'yadi.
Kuzatuvdan chiqarish, lekin diskda qoldirish #
git rm --cached maxfiy.env
Fayl diskda qoladi, lekin Git uni endi kuzatmaydi.
Parol yoki katta fayl tasodifan kommit qilinganda aynan shu ishlatiladi:
git rm --cached .env
echo ".env" >> .gitignore
git commit -m ".env kuzatuvdan chiqarildi"
Lekin eski kommitlarda u hali ham turadi. Agar u parol bo'lsa, parolni albatta almashtiring - tarixdan o'chirish yetarli emas.
Papkani o'chirish #
git rm -r eski-papka/
# Majburan (o'zgarishlar saqlanmagan bo'lsa ham)
git rm -f fayl.txt
Nomini o'zgartirish va ko'chirish #
git mv eski-nom.php yangi-nom.php
git mv index.php manba/index.php
git status
Changes to be committed:
renamed: index.php -> manba/index.php
Aslida git mv shunchaki uch amalning qisqartmasi:
mv eski.php yangi.php
git rm eski.php
git add yangi.php
Git nom o'zgarishini alohida saqlamaydi - u buni mazmun o'xshashligi bo'yicha taxmin qiladi. Shuning uchun faylni ko'chirib, bir vaqtda ichini ham ko'p o'zgartirsangiz, Git buni "o'chirish va yangi yaratish" deb ko'rsatishi mumkin.
.gitignore #
Har bir loyihada Git kuzatmasligi kerak bo'lgan fayllar bor:
Loyiha ildizida .gitignore fayl yarating:
# Muhit sozlamalari
.env
.env.local
config/database.php
# Bog'liqliklar
node_modules/
vendor/
# Kompilyatsiya natijasi
dist/
build/
*.min.js
*.min.css
# Loglar
*.log
logs/
storage/logs/
# Kesh va vaqtinchalik
*.tmp
*.cache
.sass-cache/
storage/cache/
# Muharrir va IDE
.idea/
.vscode/
*.sublime-workspace
*.swp
*~
# Operatsion tizim
.DS_Store
Thumbs.db
desktop.ini
# Zaxira nusxalar
*.sql
*.zip
*.bak
Shablon qoidalari #
| Naqsh | Nimani mos keladi |
|---|---|
fayl.txt | Istalgan papkadagi shu nomli fayl |
/fayl.txt | Faqat ildizdagi fayl |
papka/ | Papka va uning butun ichi |
*.log | Barcha .log fayllar |
*.[oa] | .o va .a fayllar |
hisobot?.txt | hisobot1.txt, hisobotA.txt |
manba/**/test/ | manba ostidagi istalgan chuqurlikdagi test |
!muhim.log | Istisno - bu faylni kuzat |
# Barcha log fayllarni yashiramiz
*.log
# Lekin bu bittasini kuzatamiz
!muhim.log
# Barcha rasmlar
rasmlar/*
# Lekin logotip kerak
!rasmlar/logo.png
Agar papka butunlay chetlab o'tilgan bo'lsa, uning ichidagi faylni istisno qilib bo'lmaydi:
rasmlar/ # butun papka chetlab o'tildi
!rasmlar/logo.png # BU ISHLAMAYDI
To'g'ri variant - papka o'rniga uning ichidagilarni ko'rsatish:
rasmlar/*
!rasmlar/logo.png
Allaqachon kuzatilayotgan fayl #
.gitignore kuzatilayotgan faylga ta'sir qilmaydiAgar fayl allaqachon kommit qilingan bo'lsa, uni .gitignore ga qo'shish
hech nima o'zgartirmaydi - Git uni kuzatishda davom etadi.
Avval kuzatuvdan chiqarish kerak:
git rm --cached fayl.log
echo "*.log" >> .gitignore
git commit -m "Log fayllar kuzatuvdan chiqarildi"
Butun kesh ni tozalash:
git rm -r --cached .
git add .
git commit -m ".gitignore qoidalari qo'llanildi"
Tekshirish #
# Nima uchun bu fayl chetlab o'tilyapti?
git check-ignore -v storage/logs/xato.log
.gitignore:12:*.log storage/logs/xato.log
12-satrdagi *.log qoidasi sabab bo'lgan.
# Chetlab o'tilgan fayllarni ko'rish
git status --ignored
# Kuzatilayotgan fayllar ro'yxati
git ls-files
Bo'sh papka masalasi #
Git fayllarni kuzatadi, papkalarni emas. Bo'sh papka kommit qilinmaydi.
Agar papka tuzilmasi kerak bo'lsa (masalan, storage/cache/), ichiga
.gitkeep nomli bo'sh fayl qo'ying:
mkdir -p storage/cache
touch storage/cache/.gitkeep
git add storage/cache/.gitkeep
.gitkeep - rasmiy standart emas, shunchaki kelishuv. Nomi istalgancha
bo'lishi mumkin.
Ichini yashirib, papkani saqlash:
storage/cache/*
!storage/cache/.gitkeep
Global .gitignore #
Muharrir va tizim fayllarini har bir loyihada takrorlamaslik uchun:
git config --global core.excludesfile ~/.gitignore_global
# ~/.gitignore_global
.DS_Store
Thumbs.db
.idea/
.vscode/
*.swp
.gitignore siga nima yozish kerak?Loyihaga tegishli narsalar: node_modules/, vendor/, .env.
Sizga tegishli narsalar (muharriringiz, operatsion tizimingiz) global faylga yozilishi kerak - jamoadagi boshqalar boshqa muharrirdan foydalanadi.
Tayyor shablonlar #
GitHub har bir til uchun tayyor .gitignore shablonlarini saqlaydi:
github.com/github/gitignore
Yangi repozitoriy yaratayotganda GitHub o'zi taklif qiladi. PHP loyihasi uchun namuna:
/vendor/
composer.phar
.env
.env.backup
.phpunit.result.cache
storage/*.key
public/hot
public/storage
npm-debug.log
yarn-error.log
.gitattributes #
Bu fayl Git ga fayllar bilan qanday ishlashni aytadi:
# Satr oxirini avtomatik boshqarish
* text=auto
# Bu fayllar har doim LF bilan
*.sh text eol=lf
*.php text eol=lf
# Bu fayllar har doim CRLF bilan
*.bat text eol=crlf
# Bu fayllar ikkilik - diff ko'rsatma
*.png binary
*.jpg binary
*.pdf binary
# Arxivga kirmasin
tests/ export-ignore
.github/ export-ignore
*.php diff=php
*.css diff=css
*.html diff=html
Bu Git ga funksiya nomlarini tanib olishga yordam beradi - diff da
@@ satrida qaysi funksiya ichida o'zgarish borligi ko'rinadi.
Fayllarni vaqtincha e'tiborsiz qoldirish #
Sozlama faylini o'zgartirdingiz, lekin kommit qilmoqchi emassiz:
git update-index --skip-worktree config/local.php
# Qaytarish
git update-index --no-skip-worktree config/local.php
# Ro'yxatni ko'rish
git ls-files -v | grep "^S"
--skip-worktree faqat sizning kompyuteringizda ishlaydi va
uni unutib qo'yish oson. Keyin "nima uchun mening o'zgarishim
push bo'lmayapti?" degan savol tug'iladi.
To'g'ri yechim - sozlamani .env ga chiqarish va .env.example
faylini repozitoriyda saqlash.
Toza holatga keltirish #
# Kuzatilmayotgan fayllarni ko'rish (o'chirmasdan)
git clean -n
# O'chirish
git clean -f
# Papkalar bilan birga
git clean -fd
# Chetlab o'tilgan fayllarni ham
git clean -fdx
git clean -fdx qaytarib bo'lmaydiBu buyruq kuzatilmayotgan hamma narsani o'chiradi - shu jumladan
.env faylingizni va node_modules/ ni.
Har doim avval -n bilan tekshiring:
git clean -ndx
- Loyihangizda
.gitignorefayl yarating. *.log,.envvanode_modules/ni chetlab o'ting.xato.logfayl yarating vagit statusda ko'rinmasligini tekshiring.git check-ignore -v xato.logbilan qaysi qoida ishlaganini ko'ring.- Bir faylni kommit qiling, keyin uni
.gitignorega qo'shing - hali ham kuzatilayotganini ko'ring. git rm --cachedbilan uni kuzatuvdan chiqaring.storage/cache/papkasini.gitkeepbilan saqlang.git mvbilan bitta faylni boshqa papkaga ko'chiring va kommit qiling.git clean -nbilan qanday fayllar o'chirilishini ko'ring.
Xulosa #
git rmfaylni ham diskdan, ham kuzatuvdan o'chiradi.git rm --cachedfaylni diskda qoldiradi, faqat kuzatuvdan chiqaradi.git mv- ko'chirish va nomini o'zgartirish uchun..gitignorekeraksiz fayllarni kuzatuvdan chiqarib turadi..gitignoreallaqachon kuzatilayotgan faylga ta'sir qilmaydi.git check-ignore -vqaysi qoida ishlaganini ko'rsatadi.- Git bo'sh papkani saqlamaydi -
.gitkeepishlating. - Shaxsiy sozlamalarni global
.gitignorega chiqaring. git cleanni har doim avval-nbilan sinang.
Keyingi bo'limda xatolarni bekor qilish yo'llarini o'rganamiz.
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.