Maqolalar 4 daqiqa 32 ko‘rish
CVS'dan Git'ga: umumiy repozitoriy uslubi
CVS'ga o‘rgangan jamoa uchun Git: bitta umumiy repozitoriy bilan ishlash, bare shared repozitoriy yaratish, CVS arxivini import qilish va server hooklari orqali branch siyosatini belgilash.
Mundarija
Git taqsimlangan tizim, lekin hamma bitta markaziy repozitoriyga push qiladigan CVS uslubida ham ishlay oladi. Bu bo‘lim aynan shu o‘tish yo‘lini tushuntiradi: umumiy repozitoriy qanday sozlanadi, eski arxiv qanday import qilinadi va kim nimaga push qila olishi qanday cheklanadi.
Bu ma’lumotnoma, dars emas
Bu qism Git'ning rasmiy qo‘llanmasi (gitcvs-migration(7), Git 2.50.1) asosida
o‘zbekchaga o‘girilgan. Ketma-ket bajariladigan dars emas: kerak
bo‘lganda ochib, kerakli joyini o‘qiysiz. Git'ni noldan o‘rganmoqchi
bo‘lsangiz, avval Git va GitHub darslarini
bajaring.
Mahalliy Git 2.50.1 paketida man sahifa o‘rnatilmaganligi sababli rasmiy Git hujjatidagi qo‘llanma asosida tarjima qilindi.
Nomi#
gitcvs-migration — CVS foydalanuvchilari uchun Git.
Qisqacha ishlatilishi#
git cvsimport *
Tavsif#
Git CVS’dan farq qiladi: har bir ishchi daraxt loyiha tarixining to‘liq nusxasiga ega repozitoriyni saqlaydi va hech bir repozitoriy tabiatan boshqasidan muhimroq emas. Shunga qaramay, hamma sinxronlanadigan yagona shared repozitoriy belgilab, CVS modeliga o‘xshash ishlash mumkin.
Avval gittutorial(7) va gitglossary(7) bilan tanishish yetarli boshlang‘ich bilim beradi.
Umumiy repozitoriy bilan ishlash#
foo.com dagi /pub/repo.git ni klonlash:
git clone foo.com:/pub/repo.git/ my-project
cd my-project
CVS’dagi cvs update ga yaqin amal:
git pull origin
O‘zgarishlarni yuborish:
git push origin master
Git’da ish avval mahalliy commit qilinadi, keyin umumiy repozitoriyga push qilinadi. Shu sababli tarmoq uzilgan paytda ham commit, log va diff ishlaydi.
Umumiy repozitoriy yaratish#
Bare shared repozitoriy yaratish:
git init --bare --shared /pub/my-repo.git
Barcha committerlarni bitta tizim guruhiga kiriting va repozitoriyni shu guruhga bering:
chgrp -R <group> /pub/my-repo.git
Kataloglar boshqa guruh a’zolari tomonidan yozilishi va ko‘rilishi uchun mos umask hamda setgid ruxsatlari zarur. --shared kerakli Git konfiguratsiyasini va boshlang‘ich ruxsatlarni sozlashga yordam beradi.
Har bir dasturchi repozitoriyni klonlab, mahalliy commitlar yaratadi va tayyor ishni push qiladi. Push rad etilsa, avval yangiliklarni pull/rebase qilib, konfliktlarni hal qilish kerak.
CVS arxivini import qilish#
Tarixiy qo‘llanmadagi usul:
git cvsimport -C <destination> <module>
Bu CVS modulini <destination> ichidagi Git repozitoriysiga import qiladi. git cvsimport cvsps ga tayanadi.
Zamonaviy bir martalik migratsiyada
cvs2gityokicvs-fast-exportyaxshiroq natija berishi mumkin. Import qilingan branchlarda bevosita ishlashdan oldin mualliflar, teglar, branchlar, fayl tarkibi va commit vaqtlarini tekshiring.
Masofaviy nom bilan incoming branchlarni ajratish tavsiya qilinadi:
git cvsimport -C project-git -r cvs <module>
Import tekshiruvi:
git fsck --full
git log --all --graph --decorate --oneline
git tag --list
Shared public repozitoriy kerak bo‘lsa, import natijasidan bare klon yarating:
git clone --bare project-git project.git
Kengaytirilgan boshqaruv#
Branch bo‘yicha ruxsat va siyosatni server hooklari, ayniqsa pre-receive va update, orqali tekshirish mumkin. Masalan:
- faqat ayrim foydalanuvchilarga muayyan branchga push ruxsati;
- non-fast-forward push’ni taqiqlash;
- teglarni o‘chirish yoki almashtirishni cheklash;
- commit xabari yoki imzosini tekshirish.
Hook rad etsa, push qabul qilinmaydi. Hooklar executable bo‘lishi va ishonchli server tomonida saqlanishi kerak.
Git’ga CVS kirishini berish#
Eski CVS mijozlariga Git repozitoriysini CVS serveri sifatida ko‘rsatish uchun git cvsserver dan foydalanish mumkin. Tafsilotlar git-cvsserver(1) da.
Bu moslik qatlami Git’ning barcha imkoniyatlarini bermaydi; imkon bo‘lsa foydalanuvchilarni to‘g‘ridan-to‘g‘ri Git ish jarayoniga ko‘chirish ma’qul.
Muqobil ish modellari#
CVS foydalanuvchilari umumiy repozitoriyga bir guruh dasturchi commit qilishiga o‘rgangan. Git buni qo‘llaydi, ammo taqsimlangan tabiati boshqa modellarni ham beradi:
- bitta maintainer asosiy public repozitoriyni yuritadi;
- dasturchilar uni klonlab, mustaqil branchlarda ishlaydi;
- tayyor o‘zgarishlar uchun pull request yoki pull so‘rovi yuboradi;
- maintainer o‘zgarishlarni tekshiradi va asosiy tarixga qo‘shadi;
- kichik jamoalar markaziy maintainersiz bir-birining repozitoriylaridan pull qilishi mumkin.
Shuningdek qarang#
gittutorial(7), gittutorial-2(7), gitcore-tutorial(7), gitglossary(7), giteveryday(7).