-
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
10.5 Git’in Daxili İşləri - Refspec
Refspec
Bu kitab boyunca uzaq branch-lardan yerli referanslara qədər sadə xəritələrdən istifadə etdik, lakin daha mürəkkəb ola bilər. Tutaq ki, son cüt bölmələri ilə birlikdə izlədiniz və kiçik bir yerli Git deposu yaratdınız və indi ona bir remote əlavə etmək istəyirsiniz:
$ git remote add origin https://github.com/schacon/simplegit-progit
Yuxarıdakı əmri işə salmaq, depolarınızın .git/config
faylına bir bölmə əlavə edir, pultun adını (origin
), remote deponun URL-ini və gətirmək üçün istifadə ediləcək refspec qeyd edir:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/*:refs/remotes/origin/*
Refspecin formatı, əvvəlcə istəyə bağlı bir {plus}
ardından <src>:<dst>
, burada <src>
remote tərəfdəki referanslar üçün nümunədir və <dst>
olduğu yerdir və bu referanslar yerli olaraq izləniləcəkdir.
{plus}
Git-ə sürətli irəliləməsə də referansı yeniləməsini söyləyir.
Avtomatik olaraq bir git remote add origin
əmri ilə yazılan varsayılan vəziyyətdə, Git serverdəki refs/heads/
altındakı bütün referansları götürür və yerli olaraq refs/remotes/origin/
yazır.
Beləliklə, serverdə bir master
branch-ı varsa, aşağıdakılardan hər hansı biri ilə həmin branch-ın jurnalına daxil ola bilərsiniz:
$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master
Hamısı ekvivalentdir, çünki Git hər birini refs/remotes/origin/master
-ə genişləndirir.
Bunun əvəzinə Git’in remote serverdəki digər branch-ları deyil, yalnız master
branch-ını hər dəfə pull down istəyirsinizsə, gətirmə xəttini yalnız bu branch-a istinad etmək üçün dəyişə bilərsiniz:
fetch = +refs/heads/master:refs/remotes/origin/master
Bu, həmin remote üçün git fetch
üçün yalnız standart refspecdir.
Yalnız birdəfəlik gətirmək istəyirsinizsə, komanda xəttində də xüsusi refspeci göstərə bilərsiniz.
Uzaqdakı master
branch-nı local olaraq origin/mymaster
-a çəkmək üçün işlədə bilirsiniz:
$ git fetch origin master:refs/remotes/origin/mymaster
Ayrıca birdən çox spesifikasiya təyin edə bilərsiniz. Əmr sətrində belə bir neçə branch-ı pull down bilərsiniz:
$ git fetch origin master:refs/remotes/origin/mymaster \
topic:refs/remotes/origin/topic
From git@github.com:schacon/simplegit
! [rejected] master -> origin/mymaster (non fast forward)
* [new branch] topic -> origin/topic
Bu vəziyyətdə, sürətli master istinad kimi göstərilmədiyi üçün master
branch pull etməsi rədd edildi.
Refspecin qarşısındakı {plus}
işarəsini göstərərək bunu ləğv edə bilərsiniz.
Konfiqurasiya faylınızda əldə etmək üçün birdən çox refspecs də göstərə bilərsiniz.
Həmişə origin
remote-undan master
və experiment
branch-larını almaq istəyirsinizsə, iki sətir əlavə edin:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/experiment:refs/remotes/origin/experiment
Git 2.6.0 olduğundan, birdən çox branch-a uyğun olmaq üçün pattern-də qismən qlobuslardan istifadə edə bilərsiniz, belə ki, bu işləyir:
fetch = +refs/heads/qa*:refs/remotes/origin/qa*
Daha yaxşısı, daha çox quruluşla eyni şeyi etmək üçün ad boşluqlarından (və ya qovluqlardan) istifadə edə bilərsiniz.
Bir sıra branch-ları push edən bir QA komandanız varsa və master
branch-nı və QA komandasının hər hansı bir branch-ını əldə etmək istəyirsinizsə, başqa bir şey yoxdursa, belə bir konfiqurasiya bölməsindən istifadə edə bilərsiniz:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/qa/*:refs/remotes/origin/qa/*
Bir QA komandasını branch-ları push edən, developerləri branch-ları push edən və inteqrasiya komandalarını uzaqdan branch-lara push edən və iş birliyi olan kompleks bir iş axını prosesiniz varsa, onları bu şəkildə asanlıqla adlandıra bilərsiniz.
Pushing Refspecs
Namespace referansları bu şəkildə ala biləməyiniz çox yaxşıdır, amma QA komandası ilk növbədə branch-larını qa/
namespace-ə necə çevirir?
Bunu push etmək üçün refspecs istifadə edərək həyata keçirirsiniz.
QA komandası, master
branch-nı remote server üzerindəki qa/master
push etmək istəyirsə, bunları işlədə bilər:
$ git push origin master:refs/heads/qa/master
Git’in hər dəfə git push origin
işə saldıqda bunu avtomatik olaraq etməsini istəsələr, konfiqurasiya sənədlərinə bir push
dəyəri əlavə edə bilərlər:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/*:refs/remotes/origin/*
push = refs/heads/master:refs/heads/qa/master
Yenə də bu, local bir master
branch-ını default olaraq remote qa/master
branch-na push etməyə səbəb olacaqdır.
Note
|
Refspec-i bir depodan götürüb başqa birinə push etmək üçün istifadə edə bilməzsiniz. Bunu edə biləcəyiniz bir nümunə üçün GitHub Public Depolarınızı Yeniləyin-ə müraciət edin. |
Reference-ları Silmək
Remote serverdən referansları silmək üçün refspec-dən belə bir şey istifadə edərək istifadə edə bilərsiniz:
$ git push origin :topic
Refspec <src>:<dst>
olduğu üçün <src>
hissəsini tərk edərək, bu, əsasən topic
branch-nı uzaqdan heç bir şey etməməyi tələb edir və onu silir.
Və ya daha yeni sintaksisdən istifadə edə bilərsiniz (Git v1.7.0-dan bəri mövcuddur):
$ git push origin --delete topic