Merge (Ders 7)
Bir önceki derste proje üzerinde birden fazla kişi çalışırken kodları nasıl güncel tutabileceğimizi gördük. Fakat orada ele aldığımız durum ideal bir durumdu. Hiçkimse aynı dosya üzerinde çalışmamış, ve hiçbir çelişki olmamıştı. Şimdi biraz daha gerçekçi bir senaryo ele alalım.
Öncelikle kendi projemizi açıp GitDers/Scripts klasöründeki AI.txt dosyasında bazı değişiklikler yapalım. Oyuna kapı eklenmiş olsun ve eve girmeden önce karakterin kapıyı açmasını, çıktıktan sonra ise kilitlemesini isteyelim.
Görev:
- Kapıyı aç
- Evi ara
- Karşına çıkan mafya adamlarını öldür
- Aylin'i ara
- Evden çık
- Kapıyı kapat
Github Desktop’ı açalım, commit başlığı olarak “Kapı eklendi” yazalım, commit’i yapalım ve push ile sunucuya gönderelim. Şimdi Current Repository menüsünden Ece’nin projesine geçelim. Pull demeden önce Ece’nin projesindeki GitDers_Ece/GitDers/Scripts klasörünün içindeki AI.txt dosyasını açalım. Henüz pull demediğimiz için kendi projemizde yaptığımız değişiklikler burada görünmeyecektir. Bu dosyada ufak bir değişiklik yapalım. Karşımıza mafya adamları değil de zombiler çıksın.
Görev:
- Evi ara
- Karşına çıkan zombileri öldür
- Aylin'i ara
- Evden çık
Ece’nin Github Desktop’a geri dönelim, “Düşman tipi değişti” diye bir commit başlığı atıp commit edelim. Şimdi sağ üstteki Pull origin düğmesine dikkat ederseniz yanında iki ok ve okların yanında 1 yazdığını göreceksiniz.
Bu tam olarak 1 – ahead, 1 – behind ya da 1 – ileride, 1 – geride demek. Yani biz henüz sunucuya göndermediğimiz bir commit yaptık (1 – ahaed ya da 1 – ileride) ve sunucuda henüz bilgisayarımıza indirmediğimiz bir commit var (1 – behind ya da 1 – geride) anlamına geliyor.
Böyle bir durumda yaptığımız commit’i sunucuya göndermek mümkün değil. Öncelikle sunucudaki bizde olmayan commit’leri indirmemiz gerekiyor. Pull origin düğmesine basalım. Herhangi bir şey yapmadan önce GitDers_Ece/GitDers/Scripts.txt klasöründeki AI.txt dosyasına bakalım.
Görev:
- Kapıyı aç
- Evi ara
- Karşına çıkan zombileri öldür
- Aylin'i ara
- Evden çık
- Kapıyı kapat
Gördüğünüz gibi git yapılan değişiklikleri otomatik olarak tespit edip iki commit’i birleştirdi. Ya da Merge (birleştirme) işlemini yaptı. Şimdi Github Desktop’a dikkat ederseniz henüz sunucuya göndermediğiniz iki commit’inizin olduğunu göreceksiniz. Daha önceden de öğrendiğimiz gibi bu duruma 2 – ahead (2 – ileride) deniyor.
Peki neden iki? Biz sadece bir commit yapmıştık. History sekmesini açıp ne olduğuna bakalım. Sondan ikinci ve üçüncü commit’lerde beklenmedik bir durum yok. Kendi projemizden gönderdiğimiz Kapı Eklendi commit’i ve Ece’nin yaptığı Düşman tipi değişti commit’lerini görüyoruz. İki commit’teki değişiklikler de bizim ve Ece’nin yaptığı değişiklikler.
Fakat sonuncusu bizim yapmadığımız, Merge branch ‘master’ (…) ile başlayan garip bir commit. Eğer o commit’i seçerseniz Ece’nin dosyasının üzerine bizim yaptığımız değişiklikler eklenmiş gibi göründüğünü fark edebilirsiniz.
İşte arka planda tam olarak bu oldu. Git sunucudaki commit’i indirip Ece’nin yaptığı değişiklikler üzerine uyguladı. İşlem başarı ile sonuçlandıktan sonra da otomatik olarak bir commit yaptı. Eğer şimdi Push origin düğmesine basarsanız Ece’nin değişiklikleri sorunsuz bir şekilde sunucuya gönderilecektir.
Her şey güzel hoş ama ya aynı satır üzerinde değişiklik yapmış olsaydık? O zaman git kimin değişliklerini alacaktı? Bu soruların cevaplarını sonraki derste göreceğiz!
Filed under: Git - @ December 15, 2019 10:58 pm
Tags: Programlama, git, versiyon kontrol, proje yönetimi, merge, git merge