Merhabalar. Git derslerimize Git Remote 2 dersimiz ile kaldığımız yerden devam ediyoruz. Git Remote 1 dersimizde ücretsiz git servislerine hesap ve depo açıp bu depoya commit yapmıştık. Bu dersimizde artık başka birini projeye dahil edip iki yerel depo ile çalışacağız.
Başka Bir Hesap Gerekli mi?
Başka bir hesap açmanıza gerek yok. Daha önce açtığımız hesabımız ile iki kişi ve daha fazlası çalışıyor gibi çalışabiliriz. Fakat bize yeni bir yerel depo gerekiyor.
Git clone
Diyelim bir kişiyi daha projenize dahil etmek ona da commit gibi yetkiler vermek istiyorsunuz. O kişi hesabını açtıktan sonra kullanıcı adı üzerinden depolara yetki verebilirsiniz. Bunun için ilgili servisin ‘Members’ ayarlarından bunu gerçekleştirebilirsiniz. Bu işi size bırakıyorum. Fakat yukarda dediğim gibi deneme yapmak için buna ihtiyacımız yok.
Diyelimki yetkileri ayarladık ve bu kişi kendi bilgisayarında sizin projenizi indirip (download) katkı sağlamak istiyor. Bunun için git clone komutunu kullanabiliriz.
Şimdi komut satırından yerelimizdeki half-life-2
dizini dışında başka bir yere gidiniz. Ben bir üst dizini tercih ediyorum siz de öyle yapabilirsiniz. Hatırlarsanız her git deposunun bir URL’i vardı. URL’i bulup aşağıdaki komutu çalıştırınız.
git clone <url> <dizin-adi>
Dizin adı olarak istediğinizi verebilirsiniz ben half-life-2-cloned
adını tercih ettim.Sondaki dizin adı yani son parametre opsiyoneldir. Eğer vermezseniz uzak depodaki adı kullanır.
Şimdi yeni dizinimize gidelim ve git status komutu ile bakalım.
Gördüğünüz üzere artık yeni bir yerel depomuz var. Daha önce yarattığımız yerel depo bundan tamamen farklıdır. Fakat aynı uzak sunucuya bağlıdır. Bunu farklı bir bilgisayarda farklı bir kullanıcı olarak düşünebilirsiniz. Neticede başka bir kişi de olsa aynı işlemleri gerçekleştirecekti.
Şimdi yeni bir chapter daha ekleyelim. Aşağıdaki satırları ekleyip commit yapalım.
Chapter 6 ============= Gordon journeys through the tunnel to the ghost town of Ravenholm. Originally a hidden village that lived free from the rule of the Combine, it was discovered by the Combine and attacked by hundreds of Headcrab Shells, thus transforming almost the entire population into deadly Zombies. This chapter also introduces two new headcrab variants - the Poison Headcrab and the Fast Headcrab - and their Zombie counterparts. Freeman kills Zombies and avoids bizarre deathtraps, meeting the man who set them, Father Grigori, who gives Gordon a shotgun. Freeman and Grigori make their way to an old mine which has a path that leads back to City 17, but Grigori stays behind to fight Zombies, and he continues to do so until the crypt behind him bursts open, leaving more zombies to come out from it. He continues to shoot the Zombies for a while until he runs through a blazing fire into the crypt.
Şimdi geçen dersimizden hatırladığımız gibi bunu uzak sunucuya gönderelim. Daha önceki işlemden tek farkı yeni branch yerine var olan bir branch’e yeni bir commit göndereceğiz. Bunun için yine git push komutunu kullanacağız.
git push origin master
Şimdi git servisine gidip yeni gönderdiğimiz commit’i görebilirsiniz. Böylece farklı bir yerel depodan aynı uzak depoya katkıda bulunmuş olduk.
Git fetch
Şimdi daha önce kullandığımız depoya geri dönelim.
cd ../half-life-2
Bu yerel depodaki commit’lere ve story.txt dosyasına göz atalım.
Anlayacağınız üzere bu depoda son yaptığımız commit yok. Bunu da bir önceki geliştiricinin durumu olarak düşünebiliriz. Bir depoya commit göndermeyi öğrendik fakat henüz bir depodan commit almayı öğrenmemiştik. Bunun için öncelikle ‘git fetch’ komutunu çalıştıralım.
git fetch
Bu komuttan sonra da incelerseniz yine yerel depomuzda yeni commit’i göremeyeceğiz. Fakat bunun yerine yerel depodaki branch listesine bakalım. Bu sefer ‘-a’ parametresi ile yapacağız.
git branch -a
chapter1
chapter2
chapter3
chapter4
chapter5
* master
remotes/origin/master
Listeye bakarsanız ‘remotes/origin/master’ diye bir branch daha görürüz. Hatırladığınız gibi böyle bir branch yaratmamıştık.
Yerel depodaki uzak branch’ler
Git’in dağıtık olduğunu tekrar hatırlatalım. Bu yüzden aslında uzak depodaki branch ile yerel depomuzdaki master
branchleri isimleri aynı olsa da aslında farklı branchlerdir. Git bu yüzden uzak depoların birebir kopyasını farklı bir isimde ve sadece okumaya açık şekilde (readonly) tutar. Bu branch’lerin adları da ‘/’ formatındadır. Yani bizim durumumuzda branch adı origin/master
olur. Eğer yerelinizde o branch yoksa git checkout <branch-adi>
yeni bir yerel branch yaratır. Bunu da dipnot olarak verelim.
origin/master
bir branch değil mi? O zaman checkout ile bakabiliriz.
Gördüğünüz gibi diğer geliştiricinin yaptığı değişiklikler burda. Peki neden bu şekilde çalışmalıyız? Sizin yereldeki deponuz henüz yeni commitlere hazır olmayabilir. O yüzden bu zamana kendiniz karar vermelisiniz.
Kısaca özetlersek git fetch komutu uzakdaki depoyu yerel depo ile bu şekilde senkronize eder. Dilerseniz ‘git fetch ‘ şeklinde de verebilirsiniz. Bu sayede sadece tek bir branch’i senkronize edecektir.
Git pull
Peki bu değişiklikleri nasıl alacağız? Normalde master
‘a geri dönüp git merge origin/master
komutu ile bu işlemi yapabiliriz. Fakat bunun yerine başka bir komut göreceğiz. ‘master”a geri dönerek git pull
komutunu çalıştıralım.
git pull origin master
Şimdi tekrar kontrol ettiğimizde son değişikliğin geldiğini görebiliriz.
Git pull komutunun detayına inersek. Aslında bizim yukarda bahsettiğimiz merge işlemini yapmış oldu. Fakat git pull bundan önce git fetch komutunu da çalıştırdı. Özetlersek:
git pull
= git fetch
+ git merge
diyebiliriz
Protokoller
Bugüne kadar HTTPS ile çalıştık. Fakat git birden fazla protokol ile de çalışabilir.
Yerel Depoyu Klonlamak
Uzak depoyu klonladığınız gibi yerel depoyu da klonlayabilirsiniz. Üstelik remote ayarlarınız da aynı kalır.
git clone half-life-2 half-life-2-backup
HTTPS
Daha önce de kullandığımız gibi git HTTPS ile çalışabilir. HTTP ile de çalışabilir ama HTTPS olmayan bir servisten uzak durun. HTTPS ile çalışırken kimliklendirme (authentication) ve yetkilendirme (authorization) için kullanıcı adı ve parola kullanır.
SSH
Git, doğal olarak SSH ile de çalışabilir. SSH protokolünü kullananlar bilirler. Genellikle private ve public anahtar kullanılır. SSH protokolü üzerinden işlem yaparken kullanıcı adı olarak da ‘git’ kullanıcısını kullanır. Bu arada ben de bugüne kadar hep bu yöntemi kullandım.
Private ve Public anahtar üretme
Bu anahtarları üretmek çok basit. Öncelikle aşağıdaki komutu çalıştırınız.
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Anahtar boyutunun 4096 olması çok önemli olduğunu da hatırlatalım. Bu komut ile beraber size hangi dosyaya kaydedeceğini sorar. Eğer daha önce oluşturmadıysanız varsayılanı kullanabilirisiniz.
Sonraki aşamada size parola soracaktır. Burdaki seçenek size kalmış eğer çok özel bir repo da çalışıyorsanız mutlaka parola koymanızı tavsiye ederim. Eğer disk bölümünüz şifreli değilse yine mutlaka parola koymanızı tavsiye ederim.
Böylece yeni bir public ve private anahtar üretmiş olduk. Linux kullanıcıları için genellikle ‘/home/kullanici.adi/.ssh’, OS X için ‘/Users/kullanici.adi/.ssh’ dizininin altında ilgili anahtarları bulabilirsiniz. Windows için ise nasıl bulacağınızı size bırakıyorum. (YN: Windows test). Private anahtarınız verdiğiniz dosya adı ile birebir aynıdır. Public ise sonunda ‘.pub’ uzantısı ile bulacaksınız. Örneğin benim ürettiğim public anahtar:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDA2+1X4YlQdtnkjDea4AVRlGE9G8aJIH+lqTAtkIyCPDVnlSBARZXVL3bDWBG9U3nctU1P+d/W40BbY35BAWnvSuFxXfQCXfLhUZFvmBGtRdaGqWXopl962R5UfopivbFnE/LihlCA9KPk61lW52pkIRnNygP04XY1K9n0CSf8ANB0iz8WfFcNalFWpNblWAjBkinERu5kALYRwkgsdZtpYqY8DSQnJXrpc4RE1jR07EiG6rUHE+Ap5RKKBGyYRYBLzw02ZEn99T4q6nYEpy5SWr81ADMY8Q6JA3k+DwgpXizT3xbCs3Pr0aLben0ujXc/nBDao0OFQJdStgQNGwktQ7XHe6HXmnkBaMGdz/GAmcHspvXq94NwDjtK7ZznwhRBMbDqX1/KsqYTONQeO+KkEnRK1LnWjau2IYrzECgFyjZ5pobpKkywEpJec4ur5Sw0yOioi8F6oJAS3Cy1X5/fkK9V4RPgooJIgazaTZJ9cdB+6Cz1h9SsuLPLTO+1g9JREGWHiu7XBCDiUNDVkkv0Redj+D1M+KAd+3etHKHYvi0rnNX6sDpWKyyjsWdbgE0/tMyeXBGEVqNpi1F8s07SUSweYbDaeQBI5ZhCJnbfzRuH8IpRT/7adCnuqCQLOsFn7Z78B8ZgBOsvQnLgE6rltUBcMpufQ/rIIpcwUMekhQ== [email protected]
Şeklindedir. Dikkat ettiyseniz public anahtar adı üstünde herkesle paylaşabilirsiniz. Ben de bu yüzden bu anahtarı burda paylaşabiliyorum. Private anahtar ise
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,DF7AE844499A10C7F2B6B5434961C4D9 DP4hsNsMNX6hWGjnAnY9xJW8DkvAFA9ge7ZGBjfPLxugStApZPe9hfjrKKeJ94NC Fw3N1gtUOgesP16caYJlCaH1XROGMhwarohtsIgsPpLi3/l5nQ9bp5e0XpcZwt1S G5eq+ZTE1g+nqH09Tx0noZEs7BmCryNj2yKB5KeResDujNRAjnUzDuKL5r1i9L25 hmmWCurr6spg5ZKcqo/GnoGKKwQYLV1Ov9RcFZfjfNV3MaBRnS1jjQo91d+qcZ8h J7BszuJAAWecyBSYFCteooKs+mJaRGUNSUDSudG+SWSwrw03By2rQHA90IXQfLQ0 8Yys9P8ttev8ushOVM2jibuvMvCvuf076EKZT8fe+ZQ/2SMlzmXfK+tP1m5UsmoO Ni4OaRd06E6FJKuQoSKYt/Ttcd457Z68lqFdyO+IfPCJocqNkj3c/KvlJgYS5y/0 2TcPkL2NhqeASsCb+iDW2qpX05+XKduYOT/Hpp+PuQNUzuf77A2TBzXR1Nsk5Pu/ RI01xKRUvEHzz/xyitCY3oEWpvjCRs/n46zeU3GiXRY3rqFfVb6T737Zuhno/6xV uTiKCHKgQTI0o9Bdk3G0PaNAcXyeR7SxxcwGYl7vnuu3cVmTQQl97yMYWO5kWEz/ VyCdUt1UiBclH/EgkAuFZl7j59D6OcK8Mn6Ms6cLqC5u8i8P6FGojvemQCIRHyyx
ile başlar. Bu şekilde ayırt edebilirsiniz. Bu arada private anahtarı da lütfen herhangi bir yerde paylaşmayın demeyi de atlamayayım.
Git ile kullanmak
Git ile ssh protokolünü ürettiğimiz anahtarlarla kullanmak için profil ayarlarından SSH public anahtarınızı ekleyebilirsiniz. Yine hatırlatayım public anahtarı ekleyeceksiniz. Private anahtarı git istemcisi yetkilendirme için kullanacak. Şu ana kadar half-life-2 deposunda HTTPS kullandık. SSH’a geçmek için ‘git@’ ile başlayan URL’e ihtiyacınız var. Uzak deponuzdan bu URL’i bulabilirsiniz. ‘half-life-2’ nin bulunduğu dizine giderek aşağıdaki komutu çalıştırabilirsiniz.
git remote set-url origin <URL>
Daha sonra ‘fetch’ yaparak test edebilirsiniz.
Bu arada private anahtarın parolasını sürekli sormasın istiyorsanız her oturumda
ssh-add -K ~/.ssh/id_rsa
komutunu çalıştırabilirsiniz.
Git Remote 2: Birlikte Çalışmak ve Protokoller dersimizde başka biri projeye nasıl dahil olur, bir depo nasıl klonlanır, ‘remote branch’ten nasıl commit alınır ve son olarak da protokolleri gördük. Bu dersi bitirdiyseniz artık projelerinizde git kullanabilirsiniz.
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.
14
Yorum Yaz