Ana içeriğe geç

Git Clone Branch: Adım Adım Eğitim

Belirli bir dalı klonlamak için, git clone --single-branch --branch komutunu kullanın; burada istediğiniz dalın adı, ise deponun URL’sidir.

Yapay Zeka ile Keşfedin

Bir kitap yazdığınızı ve özgün metni bozmadan yeni fikirlerle denemeler yapmak istediğinizi hayal edin. Taslakları ayrı tutmak için her fikir için yeni bir defter açabilirsiniz.

Bir sürüm kontrol sistemi olan Git, yazılım geliştiricilerin kodda bunu “dallar” aracılığıyla yapmasına olanak tanır. Her dal, ayrı bir geliştirme yolu gibidir; ana kod tabanını etkilemeden değişiklikleri keşfetmenizi sağlar.

Bir kitap benzetmesiyle Git dalı klonlama

Bu yazıda sizi git clone komutunun kullanımı konusunda, özellikle de belirli dalları klonlama üzerine yönlendireceğim. Git hakkında daha fazla bilgi edinmek isterseniz, bu Introduction to Git kursunu öneririm.

Acele edenler için kısa bir yanıtla başlayalım. Ardından daha fazla ayrıntıya gireceğiz.

Kısa Cevap: Belirli Bir Dal Nasıl Klonlanır

Bir git deposundan belirli bir dalı klonlamak için şu komutu kullanın:

git clone --single-branch --branch <branch_name> <repository_url>

<branch_name> yerine istediğiniz dalın adını, <repository_url> yerine de deponun URL’sini yazın. Bu komut, belirtilen dalın yerel bir kopyasını oluşturur ve o dal üzerinde doğrudan ve odaklı geliştirmeye başlamanızı sağlar.

Örnek

Bu makale boyunca şu depoyu kullanacağız. Öğrendiğiniz komutları kendi makinenizde denemek için bunu kullanabilirsiniz. Depoda üç dal bulunur:

  1. main: Varsayılan dal; iki metin dosyası içerir.
  2. add-new-file: Üçüncü bir dosyanın eklendiği dal.
  3. modify-file: İkinci dosyanın değiştirildiği dal.

Şöyle add-new-file dalını klonlayabiliriz:

git clone --single-branch --branch add-new-file https://github.com/fran-aubry/git-clone-example.git

git clone Nedir?

Varsayılan olarak, git clone tüm depoyu yerel makinenizde yeni bir dizine kopyalamak, yani tüm dalları klonlamak üzere tasarlanmıştır. Sözdizimi şöyledir:

git clone <repository_url>

Örnek depoyu klonlamak için şunu yapabiliriz:

git clone https://github.com/fran-aubry/git-clone-example.git

Bu komutu çalıştırdıktan sonra, tüm dallar yerel makinenize kopyalanır. Ancak aynı anda yalnızca bir dalın dosyaları görünür; buna checkout yapılmış dal denir. Bir depoyu klonladıktan sonra, varsayılan dal (genellikle main veya master olarak adlandırılır) checkout yapılmış olur.

git clone ile varsayılan checkout yapılan dal

Dallar arasında geçiş

Tam bir klon yaptıktan sonra, git checkout komutunu kullanarak istediğiniz dala geçebilirsiniz. Örneğin, modify-file dalına geçmek için şunu yaparız:

git checkout modify-file

dala checkout yapma

Klonlama derinliği

Git ile çalışırken, bir dal üzerindeki değişiklikler git commit komutu ile kaydedilir. Her commit, o dalın yeni bir hâlini oluşturur ve gerektiğinde buna geri dönebilirsiniz. Her commit’i bir anlık görüntü olarak düşünün; git bu görüntülerin tümünü takip eder. Bir dalı bu anlık görüntülerden herhangi birine dilediğiniz zaman döndürebilirsiniz.

Seçenek kullanılmadan çalıştırıldığında, git clone komutu tüm dallardaki tüm commit’leri yerel makinenize indirir. Projenin boyutuna bağlı olarak bu, yerel depolamada önemli miktarda alan kaplayabilir. Tüm geçmişe ihtiyaç duymayacağınızı biliyorsanız, kaç commit’in (veya anlık görüntünün) klonlanacağını belirtmek için --depth parametresini kullanabilirsiniz. 

Yalnızca en son commit’i yükleyerek ana dalı klonlamak için şu komutu kullanın:

git clone --depth=1 https://github.com/fran-aubry/git-clone-example.git

Belirli Bir Dalı Klonlama

Bir depoyu nasıl git clone ile klonlayacağımızı öğrendik. Varsayılan olarak bu komut her şeyi yerel makinenize klonlar. Çoğu zaman yalnızca belirli bir dal üzerinde çalışmakla ilgilenirsiniz; bu durumda sadece o dalı klonlamak daha verimlidir. Bu yaklaşım disk alanından tasarruf sağlar ve klonlamadan sonra dallar arasında geçiş yapma ihtiyacı olmadan doğrudan çalışmaya başlamanıza olanak tanır.

Kitap yazma benzetmesinde, bir kitabın ikinci bölümünün yeniden yazımıyla görevlendirildiğinizi düşünün. Bu durumda, görevin yürütüldüğü dalı klonlamanız gerekir; diğer bölümlerin revizyonlarıyla ilgili dallara erişmeniz gereksizdir.

Git’e yalnızca tek bir dalı klonlamasını, --single-branch ve ardından dal adını belirten --branch argümanlarını ekleyerek söyleyebilirsiniz:

git clone --single-branch --branch <branch_name> <repository_url>

Komutu parçalara ayıralım:

  • git clone: Bir depoyu uzak kaynaktan yerel makinenize kopyalamak için kullanılan temel git komutudur.
  • --single-branch: Git’e yalnızca tek bir dalı klonlamasını söyler. Herhangi bir dal belirtilmezse varsayılan dal klonlanır.
  • --branch <branch_name>: Klonlanacak dalı belirtir. <branch_name> klonlamak istediğiniz dalın adıdır.
  • <repository_url>: Deponun URL’sidir.

 Örneğin, depomuzdan yalnızca modify-file dalını klonlamak için şunu yapabiliriz:

git clone --single-branch --branch add-new-file https://github.com/fran-aubry/git-clone-example.git

Klonlanan Bir Dalla Nasıl Çalışılır

Bir dal üzerinde çalışırken yapmanız gereken üç temel işlem vardır:

  1. Geçerli durumun bir anlık görüntüsünü oluşturarak mevcut çalışmanızı kaydetmek.
  2. Herkesin erişebilmesi için değişikliklerinizi yüklemek.
  3. Başkalarının değişikliklerini indirip kendi değişikliklerinizle birleştirmek.

git commit ile değişikliklerinizi kaydetme

Git’te çalışmanızı kaydetmeye commit oluşturma denir. Bu işlem, üzerinde çalıştığınız dalın mevcut hâlinin bir anlık görüntüsünü alır.

Dalın hâli her commit’ten sonra yerel makinenizde kaydedilir; böylece ilerlemenin farklı aşamaları arasında gezinebilirsiniz.

Bir git dalındaki commit’lerin görseli

Git’te değişikliklerinizi commit etmek için git commit komutunu kullanırsınız. Ancak commit etmeden önce, git’in commit’e hangi dosyaları dahil edeceğini bilmesi gerekir. Kaydedilecek dosyaları git add komutuyla belirlersiniz. Bu komutun sözdizimi şöyledir:

git add <path_to_file>

Burada <path_to_file>, commit etmek istediğiniz dosyanın yoludur. Örneğin, örnek depomuzdaki modify-file dalındaysak ve file2.txt dosyasına bir paragraf eklediysek, şu komutla o dosyayı eklersiniz:

git add file2.txt

Commit’inize dahil etmek istediğiniz tüm dosyaları ekledikten sonra şu komutu çalıştırarak commit edebilirsiniz:

git commit -m <message>

Burada <message> argümanı, değişiklikleri kısaca anlatan ve çift tırnak içine alınmış öz bir mesaj olmalıdır. Örneğin:

git commit -m "Add paragraph"

Commit mesajı için bazı kurallar aşağıdadır. Projede çalışan herkes için netlik ve anlaşılabilirlik sağlamak açısından önemlidirler:

  • Emir kipini kullanın: Commit mesajınıza emir kipindeki bir fiille başlayın (ör. “Add”, “Fix”, “Update”). Örneğin “Added new feature” yerine “Add new feature” yazın.
  • Kısa ama açıklayıcı olun: İdeal olarak 50 karakterin altında, kısa bir mesaj hedefleyin. Ancak, değişiklikleri açıkça anlatmayı önceliklendirin. “Changed stuff” yerine “Update styling for navigation bar” yazın.
  • Genel geçer mesajlardan kaçının: “Fix bugs” veya “Make improvements” gibi muğlak mesajlardan uzak durun. Bunun yerine, “Fix bug in login form validation” ya da “Improve readability of documentation” gibi somut olun.

git push ile değişikliklerinizi yükleme

Commit ettiğinizde, değişikliklerin bir anlık görüntüsünü yerel makinenizde oluşturursunuz. Başkalarının değişikliklerinize erişebilmesi için bunları yüklemeniz gerekir. Bunu yapmak için push komutunu kullanırsınız.

Git’te push komutunun temel sözdizimi şöyledir:

git push <remote> <branch>

Bunu da parçalayalım:

  • <remote>: Değişikliklerinizi göndermek istediğiniz uzak deponun adıdır. Varsayılan olarak, bir depoyu klonladığınızda uzak depo origin olarak adlandırılır.
  • <branch>: Değişikliklerini uzak depoya göndermek istediğiniz dalın adıdır. Bu argümanı atlaranız, Git geçerli dal ve uzak izleme yapılandırmalarına göre push işlemi yapar.

git push için bazı yaygın kullanım örnekleri şunlardır:

  • Geçerli daldan değişiklikleri göndermek: git push
  • Belirli bir daldan değişiklikleri göndermek: git push origin <branch>

git pull ile değişiklikleri indirme

Git, büyük ekiplerin aynı projede eşzamanlı çalışmasını sağlar. İş arkadaşlarınız sizin üzerinde çalıştığınız dalda değişiklik yaptığında, yerel dalınız uzak dala kıyasla güncelliğini yitirebilir.

Başkalarının commit’lerini indirmek için git pull komutunu kullanırız. Git’te pull komutunun temel sözdizimi şöyledir:

git pull <remote> <branch>

Her parametre şu işi yapar:

  • <remote>: Değişiklikleri çekmek istediğiniz uzak deponun adıdır. Varsayılan olarak bu depo origin olarak adlandırılır.
  • <branch>: Değişiklikleri çekmek istediğiniz dalın adıdır. Belirtilmezse git, geçerli dal ve onun yukarı akış (upstream) dalını kullanır.

git pull komutunun bazı yaygın kullanım örnekleri şunlardır:

  • Geçerli daldan değişiklikleri çekmek: git pull
  • Belirli bir daldan değişiklikleri çekmek: git pull origin <branch>

Commit-pull-push İş Akışı

Git kullanırken, yerel dalınızın güncel kalmasını sağlamak için sık sık güncelleme çekmenizi öneririm. Aşağıdaki iyi uygulamalara uymanızı tavsiye ederim:

  • Çalışmaya başlamadan önce, en güncel sürüm üzerinde çalıştığınızdan emin olmak için geçerli dalınıza ait en son güncellemeleri çekin.
  • Sık commit edin; her commit’in küçük ve mantıksal olarak ilişkili değişikliklere odaklanmasına dikkat edin.
  • Bazı değişiklikler yapıp commit oluşturduktan sonra, eşzamanlı güncellemeler olmasına karşı dalınızı güncellemek için tekrar pull yapın.
  • Son olarak, değişikliklerinizi uzak depoya push edin.

Git iş akışı

Git Çakışmaları

Uzak bir depodan değişiklikleri indirmek için git pull komutunu çalıştırırken, başka bir commit’in yerel commit’lerinizle aynı satırları değiştirmiş olmasıyla karşılaşabilirsiniz. Git değişiklikleri otomatik olarak birleştirmeye çalışır ve çoğu durumda bunda başarılıdır. Örneğin, aynı dosyanın farklı bölümlerinde değişiklik yapılmışsa, commit’ler farklı kısımları etkilediğinden Git bunları sorunsuzca birleştirebilir.

Ancak siz ve başka bir katkıcı aynı paragrafı düzenlediyseniz, git hangi sürümün tutulacağını belirleyemez ve bir birleştirme (merge) çakışması oluşur. Bu durumda, hangi değişikliklerin korunacağına karar vererek çakışmayı elle çözmeniz gerekir.

Çakışmaların çözümü hakkında daha fazla rehberlik için, şu makaleyi okumanızı öneririm: Git’te birleştirme çakışmaları nasıl çözülür.

GitHub’dan İndirme

Bazı durumlarda, değiştirme niyetiniz olmadan kullanmak üzere bir deponun yerel bir kopyasına ihtiyaç duyarsınız. Eğer depo herkese açıksa, yerel makinenize Git kurmanıza gerek yoktur. GitHub’dan doğrudan Code düğmesine, ardından Download Zip düğmesine tıklayarak indirebilirsiniz; aşağıda gösterildiği gibi:

GitHub’dan indirme örneği

Sonuç

Git klonlama, bir Git deposunu yerel makinenize kopyalamanızı sağlar; böylece kodu kullanabilir veya yeni işlevler ekleyerek genişletebilirsiniz. Bir depo klonlandığında tüm dallar indirilir; bu da önemli miktarda disk alanı tüketebilir.

Dallar, belirli değişiklikler veya özellikler üzerinde çalışmak için kullanılır. Belirli bir dalı klonlamak, ilgisiz çalışmaları indirmeden ilgili değişikliklere katkıda bulunmanızı sağlar; böylece çok daha az disk alanına ihtiyaç duyar ve yerel diskinizi daha derli toplu tutarsınız.

Konu hakkında daha fazla bilgi edinmek isterseniz bu Yeni Başlayanlar için GitHub ve Git Eğitimi yazısını öneririm.

François Aubry

Yazar

François Aubry

CheapGPT’te full-stack mühendisi ve kurucuyum. Öğretmek her zaman tutkum oldu. Öğrencilik yıllarımdan itibaren diğer öğrencilere ders verme ve yardımcı olma fırsatlarını hevesle aradım. Bu tutku beni doktora yapmaya yönlendirdi; bu süreçte akademik çalışmalarımı desteklemek için araştırma görevlisi olarak da görev aldım. O yıllarda, geleneksel sınıf ortamında bağlar kurmaktan ve öğrenmeyi kolaylaştırmaktan büyük bir tatmin duydum. Ancak çevrim içi öğrenme platformlarının ortaya çıkmasıyla birlikte dijital eğitimin dönüştürücü potansiyelini fark ettim. Nitekim üniversitemizde bu tür bir platformun geliştirilmesinde aktif rol aldım. Geleneksel öğretim ilkelerini yenilikçi dijital yöntemlerle bütünleştirmeye derinden bağlıyım. Tutkum, yalnızca ilgi çekici ve bilgilendirici olmakla kalmayan, aynı zamanda bu dijital çağdaki öğrenenler için erişilebilir kurslar tasarlamaktır.

Konular

İlgili