-
1. Başlanğıc
- 1.1 Versiyaya Nəzarət Haqqında
- 1.2 Git’in Qısa Hekayəsi
- 1.3 Git Nədir?
- 1.4 Əmr Sətiri
- 1.5 Git’i Quraşdırmaq
- 1.6 İlk Dəfə Git Quraşdırması
- 1.7 Kömək Almaq
- 1.8 Qısa Məzmun
-
2. Git’in Əsasları
-
3. Git’də Branch
- 3.1 Nutshell’də Branch’lar
- 3.2 Sadə Branching və Birləşdirmə
- 3.3 Branch İdarəedilməsi
- 3.4 Branching İş Axınları
- 3.5 Uzaq Branch’lar
- 3.6 Rebasing
- 3.7 Qısa Məzmun
-
4. Server’də Git
- 4.1 Protokollar
- 4.2 Serverdə Git Əldə Etmək
- 4.3 Sizin öz SSH Public Key’nizi yaratmaq
- 4.4 Server qurmaq
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Üçüncü Tərəf Seçimləri
- 4.10 Qısa Məzmun
-
5. Paylanmış Git
-
6. GitHub
-
7. Git Alətləri
- 7.1 Reviziya Seçimi
- 7.2 Interaktiv Səhnələşdirmə
- 7.3 Stashing və Təmizləmə
- 7.4 İşinizin İmzalanması
- 7.5 Axtarış
- 7.6 Tarixi Yenidən Yazmaq
- 7.7 Reset Demystified
- 7.8 İnkişaf etmiş Birləşmə
- 7.9 Rerere
- 7.10 Git ilə Debugging
- 7.11 Alt Modullar
- 7.12 Bundling
- 7.13 Dəyişdirmək
- 7.14 Etibarlı Yaddaş
- 7.15 Qısa Məzmun
-
8. Git’i Fərdiləşdirmək
- 8.1 Git Konfiqurasiyası
- 8.2 Git Atributları
- 8.3 Git Hook’ları
- 8.4 Git-Enforced Siyasət Nümunəsi
- 8.5 Qısa Məzmun
-
9. Git və Digər Sistemlər
- 9.1 Git Müştəri kimi
- 9.2 Git’ə Miqrasiya
- 9.3 Qısa Məzmun
-
10. Git’in Daxili İşləri
- 10.1 Plumbing və Porcelain
- 10.2 Git Obyektləri
- 10.3 Git Referansları
- 10.4 Packfile’lar
- 10.5 Refspec
- 10.6 Transfer Protokolları
- 10.7 Maintenance və Məlumatların Bərpası
- 10.8 Mühit Dəyişənləri
- 10.9 Qısa Məzmun
-
A1. Appendix A: Digər Mühitlərdə Git
- A1.1 Qrafik interfeyslər
- A1.2 Visual Studio’da Git
- A1.3 Visual Studio Code’da Git
- A1.4 Eclipse’də Git
- A1.5 Sublime Text’də Git
- A1.6 Bash’da Git
- A1.7 Zsh’də Git
- A1.8 PowerShell’də Git
- A1.9 Qısa Məzmun
-
A2. Appendix B: Proqramlara Git Daxil Etmək
- A2.1 Əmr-sətri Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Appendix C: Git Əmrləri
- A3.1 Quraşdırma və Konfiqurasiya
- A3.2 Layihələrin Alınması və Yaradılması
- A3.3 Sadə Snapshotting
- A3.4 Branching və Birləşmə
- A3.5 Layihələrin Paylaşılması və Yenilənməsi
- A3.6 Yoxlama və Müqayisə
- A3.7 Debugging
- A3.8 Patching
- A3.9 E-poçt
- A3.10 Xarici Sistemlər
- A3.11 İdarəetmə
- A3.12 Plumbing Əmrləri
8.3 Git’i Fərdiləşdirmək - Git Hook’ları
Git Hook’ları
Bir çox digər Versiya İdarəetmə Sistemləri kimi, Git də müəyyən vacib tədbirlər baş verdikdə xüsusi skriptləri söndürmək üçün bir yola malikdir. Bu hook-ların iki qrupu var: müştəri tərəfi və server tərəfi. Müştəri tərəfindəki hook-lar committing və birləşmə kimi əməliyyatlarla başlayır, server tərəfindəki hook-lar, push edilmiş commit-lərin alınması kimi şəbəkə əməliyyatlarında işləyir. Bu hook-lardan hər cür səbəbə görə istifadə edə bilərsiniz.
Hook’un Qurulması
Hook-lar hamısı Git qovluğunun hooks
subdirectory-da saxlanılır.
Əksər layihələrdə bu .git/hooks
-dur.
git init
ilə yeni bir depo qurduğunuzda, Git, hook-lar qovluğunu bir çox nümunə skript ilə doldurur, bir çoxu bunlar üçün yararlıdır; eyni zamanda hər bir skriptin giriş dəyərlərini sənədləşdirirlər.
Bütün nümunələr bir hissəsi Perl-in atıldığı shell skriptləri kimi yazılır, lakin düzgün adlandırılan hər hansı bir icra olunan skript yaxşı işləyəcək - onları Ruby və ya Python-da və ya tanış olduğunuz hər hansı bir dildə yaza bilərsiniz.
Birləşdirilmiş hook skriptlərindən istifadə etmək istəyirsinizsə, adını dəyişdirməlisiniz; fayl adlarının hamısı .sample
ilə bitir.
Bir hook skriptini işə salmaq üçün, müvafiq olaraq adlandırılan (heç bir extension olmadan) və icra oluna bilən .git qovluğunuzun hooks
subdirectory-ə bir fayl qoyun.
O nöqtədən irəli çağırılmalıdır.
Burada əsas hook fayl adlarının əksəriyyətini əhatə edəcəyik.
Müştəri Tərəfindəki Hook’lar
Bir çox müştəri-tərəfi hook var. Bu bölmə onları committing-workflow hook-larına, email-workflow skriptlərinə və hər şeyə bölür.
Note
|
Müştəri tərəfindəki hook-ların bir depo klonlandığında deyil kopyalandığını qeyd etmək vacibdir. Bu skriptlərlə niyyətiniz bir policy-ni tətbiq etməkdirsə, bunu server tərəfində etmək istərdiniz; Git-Enforced Siyasət Nümunəsi-də nümunəyə baxın. |
Committing-Workflow Hook’ları
İlk dörd hook, işləmə prosesi ilə əlaqəlidir.
pre-commit
hook-nu bir commit mesajı yazmadan əvvəl işə salın.
Tətbiq ediləcək snapshot-u yoxlamaq, bir şeyi unutduğunuzu yoxlamaq, testlərin işlədiyinə əmin olmaq və ya kodda yoxlamaq üçün lazım olan hər şeyi araşdırmaq üçün istifadə olunur.
Bu hook-dan non-zero-dan çıxmaq, commit-i ləğv edir, baxmayaraq ki, git commit --no-verify
ilə atlaya bilərsiniz.
Kod tərzini yoxlamaq (lint
və ya buna bənzər bir şey işlətmək), whitespace boşluğunu yoxlamaq (standart hook məhz bunu edir) və ya yeni metodlarla uyğun sənədlərin olmasını yoxlamaq kimi işləri edə bilərsiniz.
Commit mesaj redaktoru işə düşməmişdən əvvəl, lakin default mesajı yaradıldıqdan əvvəl prepare-commit-msg
hook-unu işə salın.
Commit müəllifi görməmişdən əvvəl standart mesajı düzəltməyə imkan verir.
Bu hook bir neçə parametr götürür: indiyə qədər commit mesajını tutan faylın yolu, commit-in növü və bu düzəliş edilmiş bir commit-dirsə, SHA-1 commit-i.
Bu hook ümumiyyətlə normal commit-lər üçün faydalı deyildir; daha doğrusu, şablon mesajlar, birləşmə commit-ləri, düzəliş edilmiş commit-lər kimi standart mesajın avtomatik olaraq yaradıldığı commit-lər üçün yaxşıdır. Proqramı daxil etmək üçün bir commit şablonu ilə birlikdə istifadə edə bilərsiniz.
commit-msg
hook-u bir parametr alır, bu da yenə developerlər tərəfindən yazılan commit mesajını alan keçici bir faylın yoludur.
Bu skript sıfırdan kənar olarsa, Git commit götürmə prosesini ləğv edir, beləliklə proyekt vəziyyətinizi təsdiqləmək və ya commit-in yerinə yetirilməsinə icazə vermədən əvvəl mesaj göndərmək üçün istifadə edə bilərsiniz.
Bu fəslin son hissəsində, commit mesajınızın tələb olunan bir nümunəyə uyğun olub olmadığını yoxlamaq üçün bu hook-dan istifadə edəcəyik.
Bütün commit prosesi başa çatdıqdan sonra post-commit
hook-u işləyir.
Heç bir parametr tələb etmir, ancaq git log -1 HEAD
-u işə salmaqla sonuncu commit-i asanlıqla əldə edə bilərsiniz.
Ümumiyyətlə, bu skript bildiriş və ya oxşar bir şey üçün istifadə olunur.
E-poçt İş Axını Hook’ları
E-poçt əsaslı workflow üçün üç müştəri tərəfində hook qura bilərsiniz.
Hamısı git am
əmri ilə çağırılır, buna görə workflow əmrinizdə bu əmrdən istifadə etmirsinizsə, növbəti hissəyə etibarlı şəkildə keçə bilərsiniz.
Əgər git format-patch
tərəfindən hazırlanmış e-poçt üzərindən patch-lar alırsınızsa, bunlardan bəziləri sizin üçün faydalı ola bilər.
İşlədilən ilk hook applypatch-msg
-dir.
Tək bir arqument tələb olunur: təklif edilən commit mesajını ehtiva edən müvəqqəti sənədin adı.
Bu skript non-zero-dan çıxsa Git patch-ı ləğv edir.
Bunu bir commit mesajının düzgün şəkildə formatlandığından əmin olmaq və ya skriptin yerində düzəldərək mesajı normallaşdırmaq üçün istifadə edə bilərsiniz.
git am
vasitəsilə patch-lar tətbiq edilərkən işə salınacaq növbəti hook pre-applypatch
-dir.
Bu bir az qarışıqdır, patch tətbiq olunduqdan sonra işlənir, lakin bir commit götürülmədən əvvəl, snapshotunu yoxlamaq üçün istifadə edə bilərsiniz.
Bu skriptlə testlər apara və ya işləyən ağacı yoxlaya bilərsiniz.
Bir şey əskikdirsə və ya testlər keçmirsə, non-zero-dan çıxmaq patch etmədən git am
skriptini ləğv edir.
Bir git am
əməliyyatı zamanı işləyən son hook, commit götürüldükdən sonra işləyən post-applypatch
-dir.
Bunu bir qrupa və ya pull etdiyiniz patch-ın müəllifinə bunu etdiyinizi bildirmək üçün istifadə edə bilərsiniz.
Bu skriptlə patching prosesini dayandıra bilməzsiniz.
Başqa Müştəri Hook’ları
pre-rebase
hook-u hər hansı bir şeyi təzələmədən əvvəl işləyir və non-zero-dan çıxaraq prosesi dayandıra bilər.
Bu hook-dan artıq push edilmiş commit-lərin azaldılmasına icazə verməmək üçün istifadə edə bilərsiniz.
Git’in quraşdırdığı pre-rebase
hook nümunəsi bunu edir, baxmayaraq ki, workflow uyğun gəlməyəcək bəzi fərziyyələr irəli sürür.
post-rewrite
hook-u git commit --amend
və git rebase
(git filter-branch
tərəfindən olmasa da) kimi commit-ləri əvəz edən əmrlər tərəfindən idarə olunur.
Tək arqumenti, yenidən yazmağı hansı əmrlə işə salmasıdır və stdin
-də yenidən yazılanların siyahısını alır.
Bu hook-un post-checkout
və post-merge
hook-larla eyni istifadəsi çoxdur.
Uğurlu bir git checkout
etdikdən sonra post-checkout
hook-u işləyir; iş qovluğunu layihə mühitini düzgün qurmaq üçün istifadə edə bilərsiniz.
Bu, mənbədən idarə olunan avtomatik olaraq yaradan sənədləri və ya bu sətirdə bir şey istəmədiyiniz böyük ikili sənədlərdə hərəkət etmək deməkdir.
post-merge
hook-u uğurlu merge
əmrindən sonra işləyir.
Bunu Git-in izləyə bilmədiyi iş ağacındakı icazə məlumatları kimi məlumatları bərpa etmək üçün istifadə edə bilərsiniz.
Bu hook eyni şəkildə işləyən ağac dəyişdikdə kopyalamaq istədiyiniz Git nəzarətindən kənar sənədlərin mövcudluğunu təsdiqləyə bilər.
Uzaqdakı istinadlar yeniləndikdən sonra, lakin hər hansı bir obyekt köçürülməmişdən əvvəl, pre-push
hook-u git push
zamanı işləyir.
Remote-un adını və yerini parametr olaraq alır və stdin
vasitəsilə yenilənəcək reflərin siyahısını alır.
Bir push etmə meydana gəlməzdən əvvəl bir sıra ref yeniləmələrini təsdiqləmək üçün istifadə edə bilərsiniz (non-zero bir çıxış kodu push etməyi ləğv edəcək).
Git, bəzən normal fəaliyyətinin bir hissəsi olaraq garbage collection-u, git gc --auto
əmrini işlədərək edir.
pre-auto-gc
hook garbage collection-dan bir az əvvəl çağırılır və bunun baş verdiyini xəbərdar etmək və ya yaxşı bir vaxt olmadığı təqdirdə collection-u ləğv etmək üçün istifadə edilə bilər.
Server Tərəfindəki Hook’lar
Müştəri tərəfindəki hook-lara əlavə olaraq, layihə üçün hər cür siyasəti tətbiq etmək üçün bir sistem administratoru kimi bir neçə vacib server tərəfli hook-dan istifadə edə bilərsiniz. Pre hook-lar push etməni rədd etmək və müştəriyə bir səhv mesajı yazdırmaq üçün istənilən vaxt non-zero-dan çıxa bilər; istədiyiniz qədər kompleks bir push etmə siyasəti yarada bilərsiniz.
pre-receive
Müştəri tərəfdən bir push etmə işləyərkən işləyən ilk skript pre-receive
-dır.
Stdin-dən pushed edilən istinadların siyahısını alır; non-zero-dan çıxsa, heç biri qəbul edilmir.
Bu hook-dan istifadə edərək güncəllənmiş istinadların heç birinin sürətli göndərilmədiyinə əmin olmaq və ya push etməklə dəyişdirdikləri bütün istinadlar və sənədlər üçün giriş nəzarəti etmək üçün istifadə edə bilərsiniz.
update
update
skripti pre-receive
skriptinə çox oxşayır, yalnız push etmə yeniləməyə çalışdığı hər branch üçün bir dəfə işlədilir.
Pusher birdən çox branch-a push etməyə çalışırsa, pre-receive
yalnız bir dəfə işləyir, yeniləmə push etdikləri hər branch üçün bir dəfə işləyir.
Stdin-dən oxumaq əvəzinə bu skript üç arqument götürür: istinadın adı (branch), istinaddan əvvəl göstərilən SHA-1 və istifadəçi push etməyə çalışdığı SHA-1.
Yeniləmə skripti non-zero-dan kənar olarsa, yalnız həmin müraciət rədd edilir; digər istinadlar yenilənə bilər.
post-receive
post-receive
hook bütün proses başa çatdıqdan sonra işləyir və digər xidmətləri yeniləmək və ya istifadəçiləri xəbərdar etmək üçün istifadə edilə bilər.
pre-receive
hook-la eyni stdin məlumatlarını alır.
Nümunələr siyahının elektron poçtla göndərilməsi, davamlı inteqrasiya serverinə bildiriş verilməsi və ya ticket-tracking sisteminin yenilənməsi daxildir - hətta biletlərin açılmalı, dəyişdirilməli və ya bağlanmalı olub olmadığını görmək üçün commit mesajlarını təhlil edə bilərsiniz.
Bu skript push etmə prosesini dayandıra bilməz, lakin müştəri tamamlanana qədər əlaqəsini kəsmir, buna görə uzun müddət ala biləcək bir şey etməyə çalışsanız ehtiyatlı olun.