izmir escort
git merge

Git Dersleri – Git Branch ve Checkout

Merhabalar, bir önceki git dersimizde, commit yapmayı öğrenmiştik. Bu dersimizde de yine en temel kavramlardan biri olan branch kavramını öğreneceğiz. git branch konusuna gelmeden önce, “branch” kelimesini Türkçe’ye “dal” olarak çevirdiğimizi ve derslerimizde bu kelimeyi yoğun olarak kullanacağımızı belirtelim.

Bu derste yapacağımız örnekler bir önceki dersin devamı niteliğinde. Ordaki half-life-2 projemize kaldığımız yerden devam edeceğiz. Örneklerimizde aynı ana gelmek için lütfen önceki derse gidiniz.

Java Kotlin Eğitimi

Zamanı Geri Almak

Dallanma yani branching kavramına geçmeden önce ilk derste size vadettiğimiz zamanı geri alma olayına bakalım. Hatırlarsanız geçen dersimizde iki commit yapmıştık. Hemen terminal uygulamamızı açıp bir git depomuz olan half-life-2 dizinine gidelim. Daha sonra git log komutunu çalıştıralım.

Siz de benim gibi aşağıdaki gibi bir çıktı alırsınız.

Şu anda iki commit yapıldığını görüyoruz. Elbette yapılan commit’lerin id’leri ve yazar bilgisi sizin sisteminizde farklı olacaktır. Lütfen buna dikkat ediniz.

Bir de story.txt dosyamızın içeriğine bakalım.

 

git checkout

Şimdi zamanı geriye alalım. İlk commitimizi hatırlıyor musunuz? Bu commitimizde sadece ilk paragrafı eklemiştik. Şimdi o ana geri dönelim. Bunun için bize gitmek istediğimiz commit’in id’si gerekli. Benim sistemimde bu id 815029b1b00556b277a3b9b87c3b19e24dc755bd olarak tanımlı. İsterseniz bu id’nin tamamını ya da ilk 7 karakterini(815029b) de kullanabilirsiniz.

git checkout komutu git deposunda başka bir yere gitmemizi sağlar. Gitmek istediğimiz yer bir önceki commit olduğu için bu commit’in idsini vereceğiz.

Şimdi siz de ilk commit’in idsini alıp yukardaki komutu çalıştırın ve ardından git log ile kontrol edin.

Buradaki asıl önemli nokta story.txt dosyasının içeriğinin ne olduğu. Dosyanın içeriği ise şu hale geldi.

Neler oldu?

Peki daha önceki yaptığımız değişiklik yani commit nereye gitti? Eklediğimiz 2. paragraf kayıp mı oldu? Bunu zaten düşünmediğinizi biliyorum ama açıklayalım. Yaptığımız 2. commit olduğu gibi duruyor. Fakat biz zamanda geriye gittik. Zaten asıl amacımız yaptığımız değişiklikleri kaybetmemek.

Git, yaptığınız commit’e göre değişiklikleri sizin dosya sisteminize uygular. Kullandığınız text editörleri dahil bütün araçlar. Dosyaların o anki halini görür.

Şimdi geri dönelim. Bunun için aşağıdaki komutu vermeniz yeterlidir.

story.txt dosyasına baktığınızda eski haline döndüğünü görürsünüz. git log komutu da bize yine 2 commit gösteriyor. Peki master diye verdiğimiz parametre commit id’si mi? Hayır, o dalın adı.

Branch (Dal)

Oturma odası

Geldik asıl konumuza; diyelim ki yeni yapılmış sadece duvarları olan bir daire var. Bu dairenin herhangi bir oturma odasını yaşanabilir hale getireceğiz. Önce bir usta gelip o odanın elektrik tesisatını hazırlayıp gereken kabloları yerleştirecek. Başka bir usta pencere ve kapıları monte edecek. Diğer bir usta odanın duvarlarını ve tavanını boyayıp, duvarlara duvar kağıdı yapıştıracak. Zemine de başka bir usta parke döşeyecek. Bu odanın kullanılabilir hale gelmesi için bir çok adımdan geçmesi gerekiyor. Aslında çoğu iş ortak alanlar dışında birbirinden bağımsız olarak da yapıbilir. Fakat bir oda üzerinde işlemlerin aynı anda yapılması mümkün değil. Bu da verimsiz bir yöntem çünkü her usta diğerini beklemek zorunda kalıyor.

Bu verimsizliği çözmek için her ustaya çalışması için odanın kopyasını versek. Her usta da verilen oda üzerinde serbestçe çalışsa ve işlerini paralel bir şekilde tamamlasa. Daha sonra bu kopya odaları birleştirsek ve tek oda haline getirsek. Bu sorunu çözmüş oluruz. Hatta diyelim ki müşteri parkeleri beğenmedi. Söküp tekrar parke döşemek yerine o ustaya başka bir oda daha veririz. O odada yine istenileni yapar. Müşteriye gösterebilir. Hatta müşteri iki odayı görüp istediğine de karar verebilir. Mümkün mü böyle birşey? Sanal dünyada mümkün.

Aslında ‘solo’ proje dışındaki projelerde bu şekilde çalışıyoruz. Birimiz aynı oda içinde elektrik tesisatını hazırlarken diğerimiz parke döşüyor. Daha sonra yaptığımız işler birleşerek o yazılımı, ürünü ortaya çıkartıyor.

Versiyon kontrol sistemlerinde ustalara verilen odalara dal (Branch) ve bu işleme de dallanma (branching) diyoruz. Bu dallar üzerinde de birleştirme (merging) gibi işlemler yapabiliriz.

Git Branch

Half Life 2, projemizle devam edelim. Oyunumuzun ikinci bölümünü bir başka ustaya verelim. Tabiki ikinci ustada biz olacağız. Fakat kimin olduğunun bir önemi yok. Dallanma işlemlerini git branch komutu ile yapıyoruz. Bu komutu parametresiz olarak verelim.

Bu komut yerelimizde kaç dal olduğunu ve hangi dalda bulunduğumuzu gösterir. Şu anda master adında bir dalımız var ve başındaki asteriks işareti bulunduğumuz dalın master olduğunu gösteriyor.

Bu arada farketmişsinizdir. Kullandığım shell uygulaması sayesinde hangi dalda olduğumu git branch komutuna bakmadan görebiliyorum. Sizin de takip etmenizi kolaylaştıracaktır. Fakat böyle birşeyi şu an için kurmanıza gerek yok.

Git için varsayılan ana dal, master olarak tanımlanır. Bu illa böyle olmak zorunda değildir. Biz bir önceki dersimizde depo oluşturduğumuzda, git bizim için master adında bir dalı otomatik olarak oluşturdu. Yaptığımız iki commit’i de master’a yapmış olduk.

chapter2 isimli bir dal yaratalım. Yeni bir dal oluşturmak için yine git branch komutuna bir isim verirseniz sizin için bulunduğumuz daldan başka bir dal oluşturur.

git branch komutuna baktığımızda iki dal olduğunu ve halen master üzerinde olduğumuzu görüyoruz. O zaman hemen sorumuzu soralım. chapter2 dalına nasıl geçiş yapacağız? (Dersi dikkatli okuyanlar hemen cevaplayacaklardır 🙂 )

Artık chapter2 deyiz. git log ile baktığımızda buradaki commit’lerin de master ile aynı olduğunu görüyoruz. Çünkü master‘ı baz alarak yeni bir dal yarattık. Yeni yapacağımız commit’ler artık master yerine bu dala gönderilmiş olacak. Hemen bir commit yapalım. story.txt dosyasını aşağıdaki commit’leri yapalım. Aynı zamanda pratik yapmış olalım.

Chapter2 dalına commit’ler

Commit Mesajı 1: Add ch2 - "Dr. Kleiner's Lab"

Paragraf:

Commit Mesajı 2: Add ch2 - "Failed teleporting"

Paragraf:

Commit Mesajı 3: Finalize chapter 2 with Crowbar

Paragraf:

Böylece 3 commit daha yapmış olduk. Fakat bu son yaptığımız commit’leri chapter2 dalına yaptık. Şimdi master‘a geri dönüp, commit’lere ve story.txt dosyamıza bir bakalım.

Yine bahsettiğim gibi master dalına geçiş yaptığımızda, git bu dala yapılan commit’leri alıp sizin dosya sisteminize uygular. Aynı şekilde chapter2 dalına geçtiğinizde yeni yaptığınız commit’lerdeki değişiklikleri de dosyalara uygular ve bu şekilde size bir VCS ortamı sağlamış olur. Son olarak chapter2 dalına geçip tekrar kontrol edelim.

Grafiksel Gösterim

master ve chapter2 dalları arasındaki ilişkiyi aşağıdaki şekilde gösterebiliriz.

git branching
git branching

Şekildeki her daireyi bir commit olarak gösterdik. Zaten anladığınız gibi commit mesajlarını görebilirsiniz. Bu her bir commit’i bir tesbihin boncukları gibi düşünebilirsiniz. Dalları ise birer ip olarak düşünün. Elimizde iki ip var. master ipi ilk iki boncuğun içinden geçiyor. chapter2 ipi ise ekstradan 3 boncuğun içinden de geçiyor. Şu anki git depomuzun yapısı aynen bu şekildedir.

Pratik Zamanı

Geçen dersimizde deponun bulunduğu dizini silerek dersi tekrar edebileceğinizi söylemiştim. Şimdi depoyu silmek yerine chapter2 dalını silip, aynı adımları tekrarlayabiliriz. Aşağıdaki adımları yapınız.

  1. master dalına geçiş yapın,
  2. git branch -D chapter2 ile chapter2 dalını silin,
  3. chapter2 adında yeni bir dal oluşturun. (Öncekini sildiğimiz için git aynı isme sorun çıkartmayacaktır.)
  4. chapter2 dalına geçiş yapın
  5. Yukarıda verdiğimiz değişiklikleri yapın ve commitleyin.

Ev Ödevi

  1. master dalına geri dönmeden yani chapter2 dalından chapter3 isminde bir dal yaratın,
  2. Aşağıdaki paragrafları ekleyin ve commitleri yapın.

    Commit Mesajı 1: Add ch3 - Station 12

    Commit Mesajı 2: Add ch3 - Station 6 and the Headcrabs

  3. master dalına geri dönün.

Bu işlemlerden sonra depomuzun yapısı aşağıdaki şekilde olmalıdır.

Ev ödevi - branch grafiği
Ev ödevi – dallanma grafiği

Bu dersimizin de sonuna gelmiş olduk. Bu derste bir commit’e dönmeyi, dallanmayı ve dallar arasında geçiş yapmayı öğrendik. Bir sonraki dersimizde chapter2 ve chapter3 dallarındaki değişiklikleri master dalında birleştirmeyi yani merge işlemini öğreneceğiz.

Konu hakkında görüş ve sorularınızı yorum kısmından veya Soru & Cevap sitemizden sorabilirsiniz.

Bir sonraki derste görüşmek üzere…

Git derslerinin tamamı için tıklayınız.

Ömer Özkan

Genelde Java teknolojileri ile geliştirme yapar. Özgür ve açık kaynak yazılımlara meraklıdır. Boş zamanlarında gönüllü eğitimler verir. Onun için Clean Code, Test Driven Development gibi konular oldukça önemlidir.

2 Yorum

  • Dediklerinizi harfiyen uyguluyorum hocam ellerinize saglık cok tesekkur ettim.Yalnız bir sorum var Github ı nasıl kullanacagımızı ilerdemi anlatcaksınız?

    • Evet. Remote sunucularla calisma diye ayri bir ders olacak. Gitlab ve Github ornek gosterilecek.

      Iyi calismalar

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?