TR EN

2.5 Git'in Temelleri - Uzak Birimlerle Çalışma Orjinal Metin

Uzak Birimlerle Çalışma

Herhangi bir Git projesinde birlikte çalışabilmek için, uzak (remote) depoları nasıl yöneteceğinizi bilmelisiniz. Uzak depolar, projenizin ağ üzerinde bir yerde veya internette tutulan sürümleridir. Yalnız okunabilir veya hem okunabilir hem yazılabilir pek çok uzak deponuz olabilir. Başkalarıyla ortak çalışmak için uzak depolarınızın olması ve paylaşmak istediğiniz işleri buralara gönderebilmeniz (push) ve buralardan çekebilmeniz (pull) gerekir. Uzak depoları yönetebilmeniz için nasıl yeni depo ekleyeceğinizi, ihtiyaç kalmadığında nasıl silebileceğinizi, birçok uzak dalı (remote branch) nasıl yöneteceğinizi ve bunları izlenen (tracked) veya izlenmeyen olarak nasıl tanımlayacağınızı vb. pek çok şeyi bilmelisiniz. Bu bölümde uzak birimleri (remote) yönetim işlemlerinden bazılarını ele alacağız.

Uzak Birimleri Görüntüleme

Hangi uzak sunucuların kurulu olduğunu görmek için git remote komutunu çalıştırabilirsiniz. Komut, tanımladığınız uzak birimlerin kısa adlarını listeler. Eğer bir depoyu klonladıysanız en azından origin ismini (Git'in klonlama yaptığı sunucuya verdiği isim) görürsünüz.

$ 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

Bu kısa isimlerin karşılığı olarak Git'in uzak birimi okurken veya yazarken kullanacağı adresleri (URL) görmek için -v seçeneğini ekleyebilirsiniz.

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

Birden fazla uzak biriminiz varsa komut tümünü listeler. Mesela, birkaç ortakla çalışmak üzere uzak birimleri olan bir depo şöyle görünü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 çıktı, listelenen kullanıcıların katkılarını kolaylıkla çekebileceğimizi gösterir. Ayrıca bunlardan birine veya birkaçına gönderme yetkimiz de olabilir ancak bunları burada anlatmayacağız.

Buradaki uzak birimlerin çeşitli protokoller kullandığına dikkat ediniz. Bunları "Getting Git on a Server" konusunda daha ayrıntılı ele alacağız.

Uzak Depo Ekleme

Önceki bölümlerde uzak depo eklemeden bahsettik ve bazı örnekler verdik ancak burada bunu daha açık anlatacağız. Yeni bir uzak Git deposunu kısa ad vererek (shortname) eklemek için git remote add [kısa_ad] [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)

Şimdi tüm URL'yi yazmak yerine pb kısa adını kullanabilirsiniz. Mesela, Paul'de bulunan ama henüz sizde olmayan bütün bilgileri getirmek için 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'ün master dalına yerelden pb/master ile erişebilir - bunu kendi dallarınızdan biriyle birleştirebilirsiniz (merge) veya yerel bir dalı seçip (checkout) inceleyebilirsiniz. (Dalların ne olduğunu ve nasıl kullanıldığını Chapter 3'te daha ayrıntılı anlatacağız.)

Uzak Birimlerden Getirme (Fetch) ve Çekme (Pull)

Biraz önce gördüğünüz gibi uzak projelerden veriyi getirmek için şu komutu çalıştırabilirsiniz.

$ git fetch [remote-name]

Komut, uzak projeye gider ve uzak projeden henüz sizde bulunmayan tüm veriyi çeker. Bunu yaptıktan sonra bu uzak depodaki tüm dallara sahip olursunuz. Bunları istediğiniz zaman birleştirebilir veya inceleyebilirsiniz.

Bir depoyu klonlarsanız, komut uzak depoyu "origin" adıyla otomatik olarak ekler. Böylece, git fetch origin komutu siz klonladıktan (veya en son alışınızdan) sonra sunucuya gönderilen yeni çalışmaları alır. git fetch komutunun veriyi yerel deponuza çektiğini - otomatik olarak mevcut çalışmanızla birleştirme yapmadığını veya çalışmanızı değiştirmediğini bilmenizde yarar var. Hazır olduğunuzda çalışmanızın üzerine birleştirme işlemini siz yapmalısınız.

Uzak dalı izlemek üzere bir dal kurduysanız (daha fazla bilgi için gelecek bölüme ve Chapter 3'e bakınız), otomatik olarak uzak dalı alıp yereldeki cari dal ile birleştirmek için git pull komutunu kullanabilirsiniz. Bu işlem daha kolay ve rahattır; varsayılan olarak git clone komutu sizin yerel ana (master) dalınızı klonladığınız sunucudaki uzak ana (master) dalı (veya varsayılan dal nasıl adlandırılmışsa) izlemek üzere otomatik olarak kurar. git pull komutu çalıştırıldığında genellikle, asıl klonlandığı sunucudan veriyi çeker (pull) ve halen üzerinde çalıştığınız kodlara otomatik olarak birleştirmeye çalışır.

Uzak Birimlere Gönderme (Push)

Projeniz paylaşmak istediğiniz bir noktaya geldiğinde onu yukarı (upstream) göndermelisiniz. Bunu yapmak için basit bir komut var: git push [remote-name] [branch-name]. Ana dalı ana sunucuya (origin) (tekrar edecek olursak, klonlama iki ismi de otomatik olarak kurar) göndermek isterseniz bu komutu çalıştırır ve yaptığınız işlemeleri (commits) sunucuya yedeklemiş olursunuz.

$ git push origin master

Bu komut yalnız yazma hakkınız olan bir sunucudan klonlamışsanız ve bu arada başka kimse göndermediyse çalışır. Eğer başka biriyle aynı zamanda klonladıysanız ve o yukarı gönderdi ardından siz gönderdiyseniz sizin gönderdiğiniz kesinlikle reddedilecektir. Önce onların çalışmalarını çekmeniz ve kendi çalışmalarınızla birleştirmeniz gerekir; bundan sonra göndermenize izin verilir. Uzak sunuculara göndermek konusunda ayrıntılar için Chapter 3'e bakınız.

Bir Uzak Birimin İncelenmesi

Bir uzak birim hakkında daha fazla bilgi isterseniz git remote show [remote-name] komutunu kullanabilirsiniz. Komutu, origin gibi bir kısa adla kullanırsanız şöyle bir çıktı görürsünüz.

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

Uzak deponun URL'si ve izlenen dal bilgileri görüntülenir. Komut, size, master daldaysanız ve git pull komutunu çalıştırırsanız uzak birimdeki tüm referansları indirip uzaktaki master dalın yerel master dal ile otomatik olarak birleştirileceğini söylüyor. Aynı zamanda çektiği tüm uzak birim referanslarını da listeliyor.

Bu karşılaşabileceğiniz basit bir örnek. Git'i daha yoğun kullandıkça git remote show komutunun daha fazla çıktı verdiğini 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, belli dallardayken git push komutunu çalıştırdığınızda hangi dalın otomatik olarak gönderildiğini gösterir. Sunucudaki uzak dallardan hangilerinin sizde olmadığını, sunucudan silinen hangi uzak dalların sizde olduğunu ve git pull komutunu çalıştırdığınızda hangi dalların otomatik birleştirileceğini de gösterir.

Uzak Birimlerin Yeniden Adlandırılması ve Silinmesi

Bir uzak sunucunun kısa adını değiştirmek için git remote rename komutunu çalıştırabilirsiniz. Mesela, pb'yi paul olarak değiştirmek isterseniz bunu git remote rename komutuyla yapabilirsiniz.

$ git remote rename pb paul
$ git remote
origin
paul

Bu komutun uzak dal isimlerini de değiştirdiğini belirtelim. pb/master referansı paul/master olarak değiştirildi.

Bir sunucuyu taşımak, belli bir aynayı (mirror) artık kullanmıyor olmak veya katılımcılardan birinin artık katkıda bulunmaması gibi bir sebeple bir uzak birimi silmek isterseniz git remote rm komutunu kullanabilirsiniz.

$ git remote rm paul
$ git remote
origin

önceki | sonraki