-
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
3.5 Git’də Branch - Uzaq Branch’lar
Uzaq Branch’lar
Uzaqdan verilən arayışlar, filiallar, etiketlər və sair də daxil olmaqla, uzaq depolarınızdakı istinadlar (işarələr).
Əlavə məlumat üçün uzaq filiallar üçün git ls-remote <remote>`və ya `git remote show <remote>
ilə açıq arayışların tam siyahısını əldə edə bilərsiniz.
Buna baxmayaraq, daha yaygın bir yol, uzaqdan idarə olunan branch-lardan faydalanmaqdır.
Uzaqdan izləyən branch-la, uzaq branch-ların vəziyyətinə istinadlardır. Onlar hərəkət edə bilməyəcəyiniz yerli istinadlardır; Hər hansı bir şəbəkə rabitəsi etdikdə Git onları sizin üçün uzaq depo vəziyyətini dəqiq şəkildə təmsil etdiyinə əmin olmaq üçün hərəkət etdirir. Uzaqdakı depolarınızdakı filialların son dəfə bağlandığınızı xatırlatmaq üçün onları bookmark kimi düşünün.
Uzaqdan izləyən branch adları <remote>/<branch>
şəklini alır.
Məsələn, uzaqdan origin
uzaqdakı master
branch-nın nə ilə əlaqə qurduğunu görməyini istəsəniz, origin.master
branch-nı yoxlayırsınız.
Bir tərəfdaşla bir problem üzərində işləyirdinizsə və onlar iss53
branch-nı push etdilərsə, local iss53
branch-nız ola bilər, ancaq serverdəki branch uzaqdan izləmə branch-ı origin/iss53
ilə təmsil ediləcəkdir .
Bu bir az qarışıq ola bilər, buna görə bir nümunəyə baxaq.
Deyək ki, şəbəkənizdə Git serveriniz var git.ourcompany.com
.
Bundan klonlasanız, Git-in clone
əmrini avtomatik olaraq sizin üçün origin
adlandırır, bütün məlumatları aşağı salır, master
branch-nın olduğu yerə bir göstərici yaradır və local olaraq origin/master
adlandırır.
Git, local master
branch-ı ilə eyni yerdə başlayaraq local master
branch-nı verir, buna görə işləmək üçün bir şeyiniz var.
Note
|
“origin” xüsusi deyil
Nə branch adı “master”, nə də “origin” Git’də xüsusi bir məna daşımır.
Geniş istifadə edilməsinin yeganə səbəbi olan |
Local master
branch-nızda bir az iş görsəniz və bu vaxt başqa birisi git.ourcompany.com`a push etsə və `master branch-nı
yeniləyirsə, onda tarixləriniz fərqli şəkildə irəliləyəcəkdir.
Ayrıca, origin
serverinizlə əlaqədən kənarda qaldığınız müddətcə, origin/master
markeriniz hərəkət etmir.
Uzaqdan işinizi sinxronlaşdırmaq üçün git fetch <remote>
əmrini işlədirsiniz (bizim vəziyyətimizdə git fetch origin
).
Bu əmr “origin” hansı server olduğunu (bu vəziyyətdə bu git.ourcompany.com
) axtarır, olmayan hər hansı bir məlumat alır və local mənbənizi yeniləyir `origin/master`i yeni, daha müasir vəziyyətə gətirir.
git fetch
uzaqdan izləyən branch-ları yeniləyirFərz edək ki, çoxsaylı uzaq serverlərin olduğunu və bu uzaq layihələr üçün hansı uzaq filialların göründüyünü göstərmək üçün yalnız sprint komandalarınızdan birinin inkişafı üçün istifadə olunan başqa bir daxili Git serveriniz var.
Bu server git.team1.ourcompany.com
-dadır.
Bunu Git’in Əsasları bəhs etdiyimiz kimi git remote add
əmrini işlədərək hazırladığınız layihəyə yeni bir uzaq istinad kimi əlavə edə bilərsiniz.
Bütün bu URL üçün qısa ad olacaq bu uzaq "teamone" adlandırın.
İndi uzaq olan teamone
serverində hələ sizdə olmayan şeyləri əldə etmək üçün git fetch teamone
işlədə bilərsiniz.
Çünki bu server sizin origin
serverinizdə hazırda verilənlərin alt hissəsinə malikdir. Git heç bir məlumat əldə etmir, lakin teamone
nin master
branch-ı kimi götürdüyü tapşırığa işarə etmək üçün teamone/master
adlı uzaqdan izləmə branch-ı təyin edir.
teamone/master
üçün uzaqdan izləmə filialıPushing (İtələmə)
Bir filialı dünya ilə bölüşmək istədikdə, onu yazmaq imkanı olan uzaq bir yerə itələməlisiniz. Local branch-larınız avtomatik olaraq yazdığınız məsafələrə sinxronizasiya olunmur - bölüşmək istədiyiniz branch-ları açıq şəkildə göstərməlisiniz. Beləliklə, bölüşmək istəmədiyiniz iş üçün private branch-lardan istifadə edə bilərsiniz və yalnız əməkdaşlıq etmək istədiyiniz topic branchl-larını push edə bilərsiniz.
Başqaları ilə işləmək istədiyiniz serverfix
adlı bir branch-nız varsa, ilk branch-nızı push etdiyiniz kimi push edə bilərsiniz.
git push <remote> <branch>
əmrini işlət:
$ git push origin serverfix
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
* [new branch] serverfix -> serverfix
Bu bir az qısa yoldur.
Git avtomatik olaraq serverfix
branch adını refs/heads/serverfix:refs/heads/serverfix
olaraq genişləndirir. Bu o deməkdir ki, “Take my serverfix
local branch and push it to update the remote’s serverfix
branch.”
refs/heads/
hissəsini detallı Git’in Daxili İşləri üzərində keçəcəyik, ümumiyyətlə onu bağlıya da bilərsiniz.
Eyni şeyi git push origin serverfix:serverfix
-də edə bilərsiniz — “Take my serverfix and make it the remote’s serverfix.”
Local bir branch-ı fərqli adlandırılan uzaq bir brancha-a push etmək üçün bu formatdan istifadə edə bilərsiniz.
Uzaqdan serverfix
adlandırılmasını istəməsəniz, local serverfix
branch-nı uzaq layihədəki awesomebranch
branch-a push etmək üçün git push origin serverfix:awesomebranch
işlətmək olar.
Note
|
Şifrənizi hər dəfə yazmayın
Üzərinə push etmək üçün bir HTTPS URL istifadə edirsinizsə, Git server istifadəçi adınızı və identifikasiyanız üçün şifrənizi istəyəcək. Varsayılan olaraq, bu məlumat üçün terminalda ad və şifrənizi soruşacaq, buna görə server təkan verə biləcəyinizi söyləyə bilər. Hər dəfə push etdiyiniz zaman onu yazmaq istəmirsinizsə, “credential cache” qura bilərsiniz.
Ən sadə, onu Daha çox məlumat üçün Etibarlı Yaddaş-ə bax. |
Növbəti dəfə əməkdaşlarınızdan biri serverdən aldıqda serverfix
-ın server versiyasının uzaq branch-ı origin/serverfix
altında olduğu barədə bir məlumat əldə edəcəklər:
$ git fetch origin
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/schacon/simplegit
* [new branch] serverfix -> origin/serverfix
Diqqətə çatdırmaq lazımdır ki, yeni uzaqdan idarə olunan branch-ları çıxaran zaman avtomatik olaraq onların local, düzəliş olunan kopyaları olmur.
Başqa sözlə, bu vəziyyətdə yeni bir serverfix
branch-nız yoxdur - yalnız dəyişdirə bilmədiyiniz bir origin/serverfix
göstərici var.
Bu işi cari işləyən branch-ınıza birləşdirmək üçün git merge origin/serverfix
işlədə bilərsiniz.
Çalışa biləcəyiniz öz serverfix
branch-nızı istəyirsinizsə, onu uzaqdan izləyən branch-nızdan əsas götürə bilərsiniz:
$ git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
Bu, origin/serverfix
olduğu yerdə başlaya biləcəyiniz local bir branch verir.
İzləmə Branch-ları
Local bir branch-ı uzaqdan izləyən bir branch-dan yoxlamaq avtomatik olaraq “tracking branch” adlandırılan bir şey yaradır (və izlədiyi branch “upstream branch”'adlanır).
İzləmə branch-larınız uzaq bir branch-la birbaşa əlaqəsi olan local branch-lardır.
Bir izləmə branch-ında olsanız və git pull
yazsanız, Git hansı serverdən alınacağını və hansı branch-a qoşulacağını avtomatik olaraq bilir.
Bir depo klonlaşdırdıqda, ümumiyyətlə avtomatik olaraq origin/master
izləyən bir master
branch-ı yaradır.
Ancaq istəsəniz digər izləmə branch-larını - digər uzaqdan branch-ları izləyənləri və ya master
branch-nı izləməyənləri qura bilərsiniz.
Gördüyünüz nümunə sadə işdir, git checkout -b <branch> <remote>/<branch>
.
Bu Git --track
təqdim etdiyi kifayət qədər ümumi bir əməliyyatdır:
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
Əslində, bu o qədər yaygındır ki, hətta bu qısa yol üçün qısa yol var. Əgər yoxlamağa çalışdığınız branch-ın adı yoxdursa (a) yalnız bir uzaqdan bir adla (b) tam uyğun gəlirsə, Git sizin üçün bir izləmə branch-ı yaradacaq:
$ git checkout serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
Uzaq branch-dan fərqli bir adla local bir branch qurmaq üçün ilk versiyanı fərqli bir local branch adı ilə asanlıqla istifadə edə bilərsiniz:
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'
İndi sf
local branch-nız avtomatik olaraq`origin/serverfix`-dən pull olacaq.
Artıq local bir branch-nız varsa və onu yeni pull down etdiyiniz uzaq bir branch-a qurmaq və ya izlədiyiniz yuxarı branch-ı dəyişdirmək istəyirsinizsə, -u
və ya --set-upstream-to
istifadə edə bilərsiniz. İstədiyiniz zaman açıq şəkildə təyin etmək üçün git branch
seçimini seçin.
$ git branch -u origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Note
|
Yuxarıdakı shorthand
Bir izləmə branch-ı qurulduğunda onun yuxarı hissəsini |
Hansı izləmə branch-larını qurduğunuzu görmək istəyirsinizsə, -vv
seçimini git branch-a
a istifadə edə bilərsiniz.
Bu, hər branch-ın izlədiyi və local branch-ın qabaqda, arxada və ya hər ikisində olduğu kimi daha çox məlumatla local branch-larınızı siyahıya alacaq.
$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] Add forgotten brackets
master 1ae2a45 [origin/master] Deploy index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] This should do it
testing 5ea463a Try something new
Beləliklə, görürük ki, iss53
branch-mız origin/iss53
-i izləyir və iki addım qabaqdadır, yəni yerli olaraq serverə sövq edilməyən iki tapşırıq var.
Bir də görə bilərik ki, bu günə qədər master
branch-mız origin/master
-i izləyir.
Sonradan görürük ki, serverfix
branch-mız teamone
serverimizdəki server-fix-good
branch-nı izləyir və üç qabaqda və bir arxadadır.Bu o deməkdir ki, hələ birləşmədiyimiz serverdə bir commit var və üçü push etmədyimizi local olaraq həyata keçirir.
Nəhayət, testing
branch-mızın heç bir branch-ı izləmədiyini görə bilərik.
Bu nömrələr yalnız hər bir serverdən sonuncu dəfə alındıqdan bəri qeyd etmək vacibdir. Bu əmr serverlərə çatmır, local olaraq bu serverlərdən nə saxladığını izah edir. Tamamilə əvvəlcədən və arxadan nömrələrin yenilənməsini istəyirsinizsə, bu işə başlamazdan əvvəl bütün uzaqdan məlumatları gətirməlisiniz. Siz bunu belə edə biləsiniz:
$ git fetch --all; git branch -vv
Pulling (Çəkmək)
git fetch
əmri hələ olmayan serverdəki bütün dəyişiklikləri götürsə də, işləyən qovluğunuzu ümumiyyətlə dəyişdirməyəcəkdir.
Sadəcə sizin üçün məlumatları əldə edəcək və özünüzü birləşdirməyə imkan verəcəkdir.
Bununla birlikdə, git pull
deyilən bir əmr var və əksər hallarda dərhal git merge
ilə izlənilən git fetch
deməkdir.
Son hissədə göstərildiyi kimi bir izləmə branch-ı varsa, onu açıq şəkildə təyin etməklə və ya clone
və ya checkout
əmrləri ilə yaradaraq, git pull
server və branch-nıza baxacaq. Cari branch-ı izləyib, həmin serverdən alacaq və sonra uzaq branch-da birləşməyə çalıcaqsınız.
Ümumiyyətlə fetch
və merge
əmrlərini istifadə etmək daha yaxşıdır, çünki git pull
əmri çox vaxt qarışıq ola bilər.
Uzaq Branch-ların Silinməsi
Uzaq bir branch-la bitdiyinizi düşünün - sizin və əməkdaşlarınızın bir xüsusiyyət ilə tamamlandığını və uzaqdan master
branch-nıza birləşdirin (və ya sabit bir kod xəttiniz olan hər hansı bir şöbə).
git push
-da --delete
seçimini istifadə edərək uzaqdan bir branch-ı silmək olar.
Serverdən serverfix
branch-nı silmək istəyirsinizsə, aşağıdakı əmrləri izləyə bilərsiniz
$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
- [deleted] serverfix
Əsas olaraq bütün bunlar göstəricini serverdən silməkdir. Git server ümumiyyətlə məlumatları bir garbage collection işləməyincə bir müddət saxlayacaq, buna görə təsadüfən silinibsə, tez-tez bərpa etmək asandır.