Git
Chapters ▾ 2nd Edition

2.5 Git’in Əsasları - Uzaqdan İşləmək

Uzaqdan İşləmək

Hər hansı bir Git layihəsində əməkdaşlıq edə bilmək üçün uzaqdakı depolarınızı necə idarə edəcəyinizi bilməlisiniz. Uzaqdan yerləşdirilmiş depolar İnternetdə və ya şəbəkədə bir yerdə yerləşdirilən layihənizin versiyalarıdır. Onlardan bir neçəsinə sahib ola bilərsiniz, bunların hər biri ümumiyyətlə read-only və ya sizin üçün read/write olur. Başqaları ilə əməkdaşlıq etmək, bu uzaq məsafəli depoların idarə edilməsini və iş bölüşmək lazım olduqda məlumatları onlara və onlardan push və pull etməyi özündə əks etdirir. Uzaq depoları idarə etmək və uzaq depoları necə əlavə etməyi, artıq yararsız olanları uzaqlaşdırmağı, müxtəlif uzaq filialları idarə etməyi və onları izlənilən və ya izlənilməyəni müəyyənləşdirməyi və daha çoxunu əhatə edir.

Bu hissədə bu uzaqdan idarəetmə bacarıqlarından bəzilərini əhatə edəcəyik.

Note
Uzaqdakı depolar lokal maşınınızda ola bilər.

“Remote” bir depo ilə işləməlisinizsə, əslində tamamilə mümkündür. Belə bir uzaq depo ilə işləmək, hər hansı digər uzaqdan idarə olunan depoda olduğu kimi, bütün standart fetching, pushing və pulling əməliyyatları daxildir.

Uzaqdan Göstərişləriniz

Konfiqurasiya etdiyiniz uzaq serverləri görmək üçün git remote əmrini işlədə bilərsiniz. Bu göstərdiyiniz hər remote handle’ın qısa adlarını sadalayır.Deponuzu klonlaşdırmısınızsa, ən azından origin-i görməlisiniz - bu sizin klonlaşmış Git serverinizə verilən default addır:

$ git clone https://github.com/schacon/ticgit
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
origin

Həmçinin, uzaqdan oxuyarkən və yazarkən istifadə ediləcək qısa ad üçün Git’in saxladığı URL’ləri sizə göstərən –v ilə göstərə bilərsiniz:

$ git remote -v
origin	https://github.com/schacon/ticgit (fetch)
origin	https://github.com/schacon/ticgit (push)

Birdən daha çox remote qurmusunuzsa, komanda bunların hamısını sadalayır.

$ cd grit
$ git remote -v
bakkdoor  https://github.com/bakkdoor/grit (fetch)
bakkdoor  https://github.com/bakkdoor/grit (push)
cho45     https://github.com/cho45/grit (fetch)
cho45     https://github.com/cho45/grit (push)
defunkt   https://github.com/defunkt/grit (fetch)
defunkt   https://github.com/defunkt/grit (push)
koke      git://github.com/koke/grit.git (fetch)
koke      git://github.com/koke/grit.git (push)
origin    git@github.com:mojombo/grit.git (fetch)
origin    git@github.com:mojombo/grit.git (push)

Bu, istifadəçilərdən hər hansı birindən çox asanlıqla pull contributions edə biləcəyimiz deməkdir. Əlavə olaraq bunlardan birini və ya daha çoxunu pull etməyə icazə verə bilərik, baxmayaraq ki, burada qeyd edə bilmərik.

Bu remote’lərin müxtəlif protokollar istifadə etdiyinə diqqət yetirin; bu barədə daha çox məlumatı bir Serverdə Git Əldə Etmək-də əhatə edəcəyik.

Uzaqdan Depolara Əlavə Edilməsi

git clone əmrinin sizin üçün uzaqdan origin necə əlavə etdiyini bir neçə nümayiş etdik və qeyd etdik. Yeni bir uzaqdan idarə etmə necə əlavə etmək olar. Asanlıqla istinad edə biləcəyiniz qısa ad kimi yeni bir uzaq Git deposuna əlavə etmək üçün git remote add <shortname> <url> əlavə edin:

$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin	https://github.com/schacon/ticgit (fetch)
origin	https://github.com/schacon/ticgit (push)
pb	https://github.com/paulboone/ticgit (fetch)
pb	https://github.com/paulboone/ticgit (push)

İndi bütün URL əvəzinə əmr sətirindəki pb sətirindən istifadə edə bilərsiniz. Məsələn, Paulun bütün məlumatlarını götürmək istəyirsinizsə, ancaq hələ deponuzda yoxdursa, git fetch pb işlədə bilərsiniz:

$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
 * [new branch]      master     -> pb/master
 * [new branch]      ticgit     -> pb/ticgit

Paulun master branch’ı indi pb/master olaraq lokal olaraq əlçatandır - onu branch’lardan birinə birləşdirə bilərsiniz və ya yoxlamaq istəsəniz lokal bir branch’ı yoxlaya bilərsiniz. Branch’ların nədən ibarət olduğunu və onlardan daha ətraflı necə istifadə edəcəyimizi Git’də Branch-dan öyrənəcəyik.

Uzaqdan Fetching və Pulling

Gördüyü kimi, remote layihələrinizdən məlumat əldə etmək üçün işləyə bilərsiniz:

$ git fetch <remote>

Komanda o uzaq layihəyə çıxır və sizdə olmayan o remote layihədən olan bütün məlumatları çıxarır, yəni pull edir. Bunu etdikdən sonra, istənilən vaxt birləşdirə və ya yoxlaya biləcəyiniz uzaqdan bütün branch’lara istinadlar olmalıdır.

Deponu klonlaşdırsanız, əmr avtomatik olaraq uzaqdan yerləşdirilən depoları “origin” adı altında əlavə edir. Beləliklə, git fetch origin onu klonlaşdırdığınızdan (və ya sonuncu götürdüyünüzdən) sonra bu serverə sövq edilmiş hər hansı yeni bir işi gətirir. Qeyd etmək vacibdir ki, git fetch əmri yalnız məlumatları lokal depoya yükləyir - onu avtomatik olaraq hər hansı bir işlə birləşdirmir və ya hazırda olan işinizi dəyişdirmir. Hazır olanda manual olaraq işinizə birləşdirməlisiniz.

Cari branch’ınız uzaq bir branch’ı izləmək üçün qurulmuşdursa,(daha çox məlumat üçün sonrakı hissəyə və Git’də Branch-a bax), avtomatik olaraq götürmək üçün git pull əmrindən istifadə edə bilərsiniz və sonra uzaq branch-ı cari branch’ınıza birləşdirməlisiniz. Bu sizin üçün daha asan və ya daha rahat bir iş axını ola bilər; Varsayılan olaraq, git clone əmri avtomatik olaraq local master branch’nızı klonlaşdırdığınız serverdə uzaqdan master branch’ını (və ya standart budaq adlanır) izləmək üçün qurur. git pull ümumiyyətlə əvvəlcədən klonlanmış serverdən məlumat alır və avtomatik olaraq hazırda işlədiyiniz koda daxil olmağa çalışır.

Note

Git versiyasının 2.27-dən başlayaraq, pull.rebase dəyişəninin təyin edilməməsi halında git pull xəbərdarlıq verəcəkdir. Dəyişən təyin edənə qədər Git sizə xəbərdarlıq edəcəkdir.

Git’in standart davranışını istəyirsinizsə (mümkünsə sürətli irəli göndərin, başqa bir birləşmə yarat): git config --global pull.rebase "false"

Pulling edərkən yenidən yazmaq istəsəniz: git config --global pull.rebase "true"

Uzaqdan Pushing etmək

Layihənizi bölüşmək istədiyiniz bir nöqtədə olduqda, onu yuxarıdan push etməlisiniz. Bunun əmri sadədir: git push <remote> <branch>. Əgər master branch-nızı `origin`serverinə push etmək istəyirsinizsə (yenidən klonlaşdırmaq bu adların hər ikisini avtomatik olaraq sizin üçün yaradır), bu zaman serverə etdiyiniz hər hansı bir commit-i push etmək üçün işləyə bilərsiniz:

$ git push origin master

Bu əmr yalnız yazılı girişi olan bir serverdən klonlanmış və bu vaxt heç kim push etmədikdə işləyir. Eyni anda başqası ilə klonlaşsanız və onlar yuxarıya doğru push etsələr və sonra yuxarıya doğru push etsən, təkanlarınız rədd ediləcəkdir. Əvvəlcə işlərini götürməli və təkan verməyinizə qədər bunu özünüzə daxil etməlisiniz. Uzaq serverlərə necə push barədə daha ətraflı məlumat üçün Git’də Branch baxın.

Uzaqdan Yoxlama

Müəyyən bir remote haqqında daha çox məlumat görmək istəyirsinizsə, git remote show <remote> komandasını istifadə edə bilərsiniz. Bu əmri origin kimi müəyyən bir qısa ad ilə işləsəniz, bu kimi bir şey əldə edirsiniz:

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/schacon/ticgit
  Push  URL: https://github.com/schacon/ticgit
  HEAD branch: master
  Remote branches:
    master                               tracked
    dev-branch                           tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Uzaqdakı depo üçün URL, eləcə də izləmə branch’ı məlumatlarını sadalayır. Komanda sizə köməkliklə deyir ki, master branch’ında olsanız və git pull işlədirsinizsə, bütün uzaq istinadları aldıqdan sonra avtomatik olaraq uzaqdakı master branch’ında birləşəcəkdir. Ayrıca, endirdiyi bütün uzaq istinadları sadalayır.

Bu qarşılaşa biləcəyiniz sadə bir nümunədir. Git’i daha çox istifadə edərkən, git remote show-dan daha çox məlumat görə bilərsiniz:

$ git remote show origin
* remote origin
  URL: https://github.com/my-org/complex-project
  Fetch URL: https://github.com/my-org/complex-project
  Push  URL: https://github.com/my-org/complex-project
  HEAD branch: master
  Remote branches:
    master                           tracked
    dev-branch                       tracked
    markdown-strip                   tracked
    issue-43                         new (next fetch will store in remotes/origin)
    issue-45                         new (next fetch will store in remotes/origin)
    refs/remotes/origin/issue-11     stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    dev-branch merges with remote dev-branch
    master     merges with remote master
  Local refs configured for 'git push':
    dev-branch                     pushes to dev-branch                     (up to date)
    markdown-strip                 pushes to markdown-strip                 (up to date)
    master                         pushes to master                         (up to date)

Bu əmr müəyyən branch’larda olarkən git push işlədikdə hansı branch’ın avtomatik push edildiyini göstərir. Ayrıca, git pull hələ serverinizdə olmayan uzaq branch’ları, serverdən hansısa uzaq branch’ları çıxartdığınızı və çalışdığınız zaman avtomatik olaraq uzaqdan izləmə branch’ı ilə birləşdirə bilən çoxsaylı lokal branch’ları göstərir.

Uzaqdan Adların Dəyişdirilməsi və Çıxarılması

Remote qısa adını dəyişdirmək üçün git remote rename funksiyasını işlədə bilərsiniz. Məsələn, pb adını paul olaraq dəyişdirmək istəyirsinizsə, git remote rename ilə bunu edə bilərsiniz:

$ git remote rename pb paul
$ git remote
origin
paul

Bu, bütün uzaqdan izləyən branch adlarınızı da dəyişdirdiyini qeyd etmək lazımdır. Əvvəllər pb/master də istinad edilən şey indi paul/master-ə istinad ediləcəkdir.

Bir səbəbdən bir uzaqdan silmək istəsəniz - serveri köçürdünüz və ya artıq müəyyən bir güzgüdən istifadə etmirsiniz, ya da bəlkə bir dəfə töhfə verən başqa bir töhfə vermirsə, git remote remove və ya git remote rm istifadə edə bilərsiniz:

$ git remote remove paul
$ git remote
origin

Uzaqdan bir istinadı bu şəkildə sildikdən sonra, uzaqdan izlənən bütün branch’lar və bu uzaqdan əlaqəli konfiqurasiya parametrləri də silinir.