Git
Chapters ▾ 2nd Edition

2.5 Git Basics - Uzak Repo ile Çalışmak

Uzak Repo ile Çalışmak

Herhangi bir Git projesinde işbirliği yapabilmek için uzak repolarınızı nasıl yöneteceğinizi bilmeniz gerekir. Uzak repolar, projenizin İnternette veya ağda bir yerde barındırılan sürümleridir. Bunlardan birkaçına sahip olabilirsiniz. Bunların her biri genellikle sizin için salt okunur veya okuma/yazma erişimlidir. Başkalarıyla işbirliği yapmak, bu uzak repoları yönetmeyi ve işlerinizi paylaşmanız gerektiğinde verileri bu havuzlara gönderip almayı içerir. Uzak repoların yönetilmesi; uzak repoların nasıl ekleneceğini, artık geçerli olmayan uzak sunucuların nasıl kaldırılacağını, çeşitli uzak dalların nasıl yönetileceğini, bunların izlenip izlenmediğini nasıl tanımlayacağınızı ve daha fazlasını bilmeyi gerektirir. Bu bölümde bu uzaktan yönetim becerilerinden bazılarını ele alacağız.

Örnek 2. Uzak repolar yerel makinenizde olabilir.

Aslında sizinle aynı ana bilgisayar üzerinde olan bir ``uzak`` repoyla çalışıyor olmanız tamamen mümkündür. Uzak kelimesi, veri deposunun ağda veya internette başka bir yerde olduğu anlamına gelmez, yalnızca başka bir yerde olduğu anlamına gelir. Böyle bir uzak repoyla çalışmak, diğer uzaktan sunucularda olduğu gibi yine de tüm standart itme (push), çekme (pull) ve getirme (fetch) işlemlerini içerecektir.

Uzak Sunucuları Görme

Hangi uzak sunucuları yapılandırdığınızı görmek için git remote komutunu çalıştırabilirsiniz. Bu belirttiğiniz her uzak sunucunun kısa adlarını listeler. Reponuzu kopyaladıysanız en azından ``Origin`’i görmelisiniz (Git’in kopyaladığınız sunucuya verdiği varsayılan isim budur):

$ 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

Ayrıca Git’in o uzak sunucuya okuma ve yazma sırasında kullanılacak kısa ad için sakladığı URL’leri gösteren -v bayrağını da belirtebilirsiniz:

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

Birden fazla uzak sunucunuz varsa, bu komut hepsini listeler. Örneğin, birden fazla geliştiricinin beraber çalışmak için oluşturduğu birden fazla uzak sunucuya sahip bir repo şöyle görünebilir.

$ 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, diğer geliştiricilerden kolaylıkla katkı alabileceğimiz anlamına gelir. Ayrıca bunlardan bir veya daha fazlasını zorlama iznimiz olabilir, ancak bu ekrandan bu çıkarımda bulunmak mümkün değil.

Bu uzak sunucuların çeşitli protokoller kullandığına dikkat edin (Bu konu hakkında daha fazla bilgiyi Bir Sunucuda Git Kurma bölümünde ele alacağız).

Uzak Sunucuları Görme

git clone komutunun sizin için ``Origin`` uzak sunucusunu nasıl eklediğinden üstü kapalı bahsettik ve bazı gösterimler verdik. Yeni bir uzak sunucunun nasıl ekleneceği aşağıda daha açıkça anlatılmıştır. Kısa adını kullanarak yeni bir uzak Git reposu eklemek için git remote add <shortname> <url> komutunu çalıştırın:

$ 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)

Artık komut satırında URL’nin tamamı yerine pb dizesini kullanabilirsiniz. Örneğin, Paul’un sahip olduğu ancak henüz sizin reponuzda bulunmayan tüm kodları getirmek istiyorsanız, git fetch pb komutunu çalıştırabilirsiniz:

$ 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

Paul’un ana-dalına (master branch) artık yerelde pb/master olarak erişilebilmektedir. Onu kendi dallarınızdan biriyle birleştirebilirsiniz veya incelemek isterseniz herhangi bir dala geçerek göz atabilirsiniz. (Dalların ne olduğunu ve bunların nasıl kullanılacağını Git Branching bölümünde çok daha ayrıntılı olarak ele alacağız.)

Uzak Sunucudan Getirme ve Çekme

Az önce gördüğünüz gibi uzak projelerinizden veri almak için aşağıdaki komutu çalıştırabilirsiniz:

$ git fetch <remote>

Komut o uzak projeye gider ve o uzak projeden henüz sahip olmadığınız tüm verileri çeker. Bunu yaptığınız takdirde, o uzak sunucudaki tüm dallara erişim için gerekli referanslara sahip olacaksınız. Böylece istediğiniz zaman kodları inceleyebilir veya kendi kodunuzla birleştirebilirsiniz.

Eğer bir repoyu kopyalarsanız, komut o uzak repoyu otomatik olarak ``Origin`` adı altına ekler. Yani, git fetch origin, kopyalamanızdan (veya sunucudan son getirmenizden) bu yana sunucuya gönderilen tüm yeni çalışmaları getirir. git fetch komutunun verileri yalnızca yerel reponuza indirdiğini unutmamalısınız. Verileri herhangi bir çalışmanızla otomatik olarak birleştirmez veya üzerinde çalışmakta olduğunuz kodu değiştirmez. Hazır olduğunuzda bunu manuel olarak kendi kodunuzla birleştirmeniz gerekir.

Geçerli dalınız uzak bir dalı izleyecek şekilde ayarlanmışsa (daha fazla bilgi için sonraki bölüme ve Git Branching'e bakın), bu değişiklikleri otomatik olarak getirmek için git pull komutunu kullanabilirsiniz. Daha sonra bu uzak dalı mevcut dalınızla birleştirin. Bu size daha kolay veya daha rahat bir iş akışı sağlar. Varsayılan olarak git clone komutu, yerel ana dalınızı (genellikle main veya master olarak adlandırılır), kopyaladığınız uzak sunucudaki uzak ana dalı (veya varsayılan dalın adı her neyse) izleyecek şekilde otomatik olarak ayarlar. git pull komutunu çalıştırmak genellikle verileri kopyaladığınız asıl sunucudan getirir ve otomatik olarak bu verileri üzerinde çalışmakta olduğunuz kodla birleştirmeye çalışır.

Kodlarınızı Uzak Sunucuya İtmek

Projeniz belli bir aşamaya ulaştıktan sonra paylaşmak isteyebilirsiniz. Bunun için geliştirilmiş kodunuzu uzak repoya itmeniz gerekmektedir. Bunun için kullanmanız gereken komut basittir: git Push <remote> <branch>. Ana dalınızı Origin sunucunuza göndermek istiyorsanız (yine kopyalama genellikle bu adların her ikisini de sizin için otomatik olarak ayarlar), o zaman işlediğiniz katkıları sunucuya geri göndermek için şunu çalıştırabilirsiniz:

$ git push origin master

Bu komut yalnızca yazma erişiminizin olduğu bir sunucudan kopyalama yapmışsanız ve bu arada hiç kimse başka bir itme yapmamışsa çalışır. Siz ve başkaları projeyi aynı anda kopyalarsanız ve diğerleri sizden da önce değiştirilmiş kodlarını uzak sunucuya gönderirse, doğal olarak sizin itmeniz reddedilecektir. Değiştirilmiş kodunuzu itmenize izin verilmeden önce, diğerleri tarafından güncellenmiş kodları uzak repodan getirmeniz ve kendi işinize dahil etmeniz gerekecek. Güncel çalışmanızı uzak sunuculara nasıl gönderebileceğiniz hakkında daha ayrıntılı bilgi için Git Branching konusuna bakın.

Uzak Sunucunun İncelenmesi

Belirli bir uzak sunucu hakkında daha fazla bilgi görmek istiyorsanız git remote show <remote> komutunu kullanabilirsiniz. Bu komutu origin gibi belirli bir kısa adla çalıştırırsanız şöyle bir sonuç elde edersiniz:

$ 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)

Bu komut uzak repo URL’si yanında izlenen dal bilgilerini de listeler. Bununla birlikte size, eğer ana daldaysanız (main veya master) ve git pull çalıştırırsanız, tüm uzak referansları getirdikten sonra otomatik olarak uzak repodaki ana dalla birleşeceğini söyler. Ayrıca çekme yaptığı tüm uzak referansları da listeler.

Bu karşılaşacağınız basit bir örnektir. Ancak Git’i daha yoğun kullandığınızda, git remote show komutuyla çok daha fazla bilgi görebilirsiniz:

$ 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 komut belirli bir daldayken git Push komutunu çalıştırdığınızda, otomatik olarak hangi dalın uzak repoya aktarılacağını gösterir. Ayrıca; sunucudaki hangi uzak dallara henüz sahip olmadığınızı, yerelde sahip olduğunuz hangi dalların uzak sunucudan kaldırılmış olduğunu ve git pull çalıştırdığınızda otomatik olarak uzak-izleme dallarıyla birleşecek çoklu yerel dallarınızı da gösterir.

Uzak Sunucuları Yeniden Adlandırma ve Kaldırma

Bir uzaktan sunucunun kısa adını değiştirmek için git remote rename komutunu çalıştırabilirsiniz. Örneğin pb`yi `paul olarak yeniden adlandırmak istiyorsanız, bunu git remote rename komutu ile yapabilirsiniz:

$ git remote rename pb paul
$ git remote
origin
paul

Bunun tüm uzaktan izleme dal adlarınızı değiştirdiğini belirtmekte fayda var. Önceden pb/master olarak adlandırılan (referans) uzak sunucunun yeni adı artık `paul/master`dır.

Herhangi bir nedenden dolayı uzak sunucuyu kaldırmak isterseniz (ör: sunucuyu taşımışsanız veya artık belirli bir aynayı (mirror: bir repodaki tüm verileri ve geçmişi eksiksiz olarak başka bir repoya kopyalayan bir repo) kullanmıyorsanız veya geliştiricilerden biri artık projeye katkıda bulunmuyorsa git remote remove veya git remote rm komutlarından birini kullanabilirsiniz:

$ git remote remove paul
$ git remote
origin

Bir uzaktan sunucunun referansını bu şekilde sildiğinizde, o sunucuyla ilişkili tüm uzaktan izleme dalları ve yapılandırma ayarları da silinir.

scroll-to-top