GIT İşbirliği (Ders 5)

GIT İşbirliği (Ders 5)
Şimdiye kadar git’in temel komutlarını ve işeyişini öğrendik. Buraya kadar öğrendiklerimiz ile tek başımıza çalıştığımız bir projeyi yedekleyebilir ve eski haline döndürebiliriz. Fakat ilk derste de anlattığım gibi, git’in ikini önemli işlevi birden fazla yazılımcının uyum içinde çalışmasını sağlamaktır.

Daha önceki derslerde sunucudaki bir projeyi bilgisayarımıza kopyalamayı (clone’lamayı) ve yerel değişikliklerimizi sunucuya (ya da repo’ya) göndermeyi (ya da push’lamayı) öğrenmiştik. Takımdaki diğer yazılımcılar da aynı şekilde projeyi indirebilir ve üzerinde değişiklik yapabilir.

Öncelikle git’e commit ve push yaparken git arka planda ne gibi işlermler gerçekleştiriyor ona bakalım. Genel hatlarla git alanlarını üçe ayırabiliriz: bizim çalıştığımız ve bütün değişikliklerin olduğu alan, commit diyerek projenin yerel kopyasının tutulduğu alan ve commit’lerimizi push diyerek gönderdiğimiz sunucu.



Biz push dediğimizde git projenin sunucudaki versiyonunu kontrol eder. Eğer ki sunucudan indirdiğimiz son commit sunucudaki en güncel commit değil ise yerel değişikliklerimizi (yani commit’lerimizi) göndermemize izin vermez, ve önce sunucudan en son değişiklikleri indirmemizi ister.



Eğer bir başkası sizinle aynı satırları değiştirmiş ve sunucuya yüklemişse git bunu fark eder ve Conflict ya da Çelişki olarak işaretler ve sizden bunu çözmenizi ister. Confilct nasıl çözülür konusuna bir sonraki derste değineceğiz.

Projeye ikinci bir kişinin katıldığını varsayalım. Eğer bir önceki derste yaptığınız değişiklikleri sunucuya yüklemediyseniz (push) şimdi yükleyin. Bilgisayarınızda herhangi bir yere yeni bir klasör açın. Bu klasör takıma katılan ikinci kişinin proje dosyası olacak. Tabi normalde bu dosya ikinci kişinin bilgisayarında yer alacak, fakat yanınızda yedek bir bilgisayarınızın olmadığını varsayıyorum. Takıma katılan yeni arkadaşın ismi Ece olsun, dosya ismini de GitDers_Ece yapalım. Projeyi clone’lamak (ya da indirmek) için ikinci derste yaptığımız işlemin aynısını yapacağız. Sol üstteki Current Repository yazan yere, ardından da Add (ekle) düğmesine tıklayın. Çıkan menüde Clone Repository diye bir seçenek göreceksiniz.



Bundan sonrasını ikinci dersten biliyor olmalısınız. Repo’nun adresini github sitesinden kopyalayın, indirmek için yeni oluşturduğunuz GitDers_Ece klasörünü seçin ve projenin inmesini bekleyin.

Proje indikten sonra aynı isimde iki projenin olduğunu göreceksiniz. Github Desktop projeleri isimlendirirken sunucudaki proje ismini kullanıyor, yerel dosya ismini değil. Eğer Github Desktop’ta gördüğünüz projenin hangi klasörde olduğunu görmek isterseniz Changes sekmesini açıp sağ taraftaki Show in Explorer (tarayıcıda göster) düğmesine tıklayarak ya da CTRL + SHIFT + F tuşlarına basabilirsiniz.



Aynı menü yukarıda Repository‘nin altında da mevcut.



İki projenin karışmaması adına bundan sonraki ekran görüntülerinde Ece için koyu temayı kullanacağım. Bizim github’ımız ise beyaz tema ile devam edecek.



Buraya kadar her şey tamam ise aynı git projesini iki farklı bilgisayara kurduğumuzu varsayabiliriz. Artık Ece kod yazmaya hazır. İlk işi yeni bir karakter eklemek ve oyuna bir bölüm oluşturmak olsun. GitDers_Ece/Scripts klasöründeki Karakterler.txt dosyasını açın ve yeni bir karakter ekleyin. Adı Fırat olsun.

Fatih
Aylin
Refik
Turgut
Fuat
Fırat​

Aynı klasöre Bolum_1.txt isimli bir dosya oluşturun ve içine bölümü anlatan birkaç not yazın.

Gece vakti bir liman.
Fatih A noktasından bölüme başlar
Fatih'in gemiyi bulup kalkmadan önce binmesi gerekiyor

İki dosyayı da kaydedip Github Desktop’ta Ece’nin projesini açın. Beklediğimiz gibi Changes sekmesinde yeni oluşturduğumuz Bolum_1.txt dosyası ve üzerinde değişiklik yaptığımız Karakterler.txt dosyası var.



Sol üstteki Current Repository‘ye tıklayarak bizim projemize geçiş yapalım (sizin Github Desktop’ın teması değişmeyecektir). Burada Changes sekmesine bakarsanız hiçbir değişikliğin olmadığını göreceksiniz.



Sebebini siz de tahmin edebilirsinz. Ece yaptığı değişiklikleri henüz sunucuya göndermemiştir. Ece’nin projesine geri dönelim ve commit yapalım. Commit başlığı olarak “Yeni karakter ve yeni bölüm” yazacağım.

Eğer push yapmadan kendi projemize dönersek yine hiçbir değişikliğin olmadığını görebiliriz. Daha önceden de bahsettiğim gibi, commit yaparsak değişiklikleri sadece yerel dosyamıza kaydetmiş oluyoruz. Değişiklikleri sunucuya göndermek için Push origin düğmesine basmamız gerekiyor. Ece’nin projesinden push yapalım ve kendi projemize dönelim. Şimdi sağ tarafta yeni bir şeyler görmeniz gerekiyor.



Eğer Pull origin düğmesini görmüyorsanız sağ üstteki Fetch origin düğmesine basın ve değişikliklerin inmesini bekleyin. Eğer şu anda projenize bakarsanız hernangi bir değişikliğin olmadığını göreceksiniz. Bunun sebebi henüz yeni değişiklikleri indirmemiş olmamız. Github Desktop, suncuya en son güncellememizden beri kaç adet yeni commit geldiğini kontrol etti. Pull origin düğmesine tıkladığımız taktirde bu değişiklikleri indirecek ve projemize uygulayacaktır. Pull dedikten sonra proje klasörünüzü kontrol ederseniz yeni değişikliklerin geldiğini göreceksiniz. Hatta History sekmesine tıklarsanız Ece’nin yaptığı commit’i görebilirsiniz.



Ekran görüntüsüne dikkatli bakarsanız her commit başlığının altında Anton commited (…) minutes ago (Anton (…) dakika önce gönderdi) yazıyor.



Eğer bu commit’i gerçekten farklı birisi yapmış olsaydı orada onun ismi görünecekti. Gördüğünüz gibi bu sayede hangi commit’i kim yapmış rahatlıkla görebiliyorsunuz. Hatta daha ayrıntılı bir git programı veya komut satırını kullanırsanız hangi satırı kimin hangi commit ile değiştirdiğini dahi görebilirsiniz.

Bir sonraki derste değişiklik yaptğımız bir kodu aynı zamanda başka bir geliştirici değiştirmişse ne oluyor onu göreceğiz (Spoiler: Merge ve Conflict).

Yorumlar