Git ve Github Kullanımı

Berkcan Gümüşışık
Yetkin Yayın
Published in
10 min readJul 30, 2022

Merhaba arkadaşlar. Yazılıma başlarken Git ve Github’ı hep aynı şeyler sanıyoruz ama aslında bu durum yanlıştır. Git ve Github birbiriyle bağlantılıdır ama aynı şeyler değildir. Bu yazımda Git , Github, Git komutları gibi konular üzerine konuşarak Git ve Github kullanımını detaylı bir şekilde öğreniyor olacağız.

Git Nedir?

Git yazılım sistemlerinde kullanılan, hız odaklı ve dağıtık çalışan bir versiyon kontrol sistemidir. Git sayesinde yapacağınız projelerin adım adım versiyonlarının kopyalarını alarak daha sonra ihtiyaç duyduğumuz zaman aldığınız kopyalara yani versiyonlara kolayca dönebilme imkanı sunmaktadır. Mesela bir oyun oynadığımızı düşünelim. Bu oyunda zorlu görevleri atladıkça bir daha tekrarlamamak adına oyunu kaydederiz. Git sayesinde de aynı oyunda zorlu görevleri geçtiğimiz gibi kodlarımızı da Git sayesinde kaydediyoruz.

Git ücretsiz ve tamamen açık kaynak kodlu bir yapıdır. İlk sürümü Linux çekirdeği’nin geliştirilmesinde kullanılmak üzere 2005 yılında Linus Torvalds tarafından oluşturulmuştur.

Git versiyon kontrol sistemini bilgisayarınıza istedğiniz sürümü aşağıdaki linkten indirebilirsiniz. Ayrıca kurulumu klasik programları gibidir hızlıca kurulumunu yapma imkanı sunmaktadır.

Peki Neden Versiyon Kontrol Sistemini Kullanmalıyız?

  • Uyumlu ekip çalışması sunmaktadır. Birden fazla kişinin çalıştığı projelerde; projede yapılan değişiklikleri görmeyi, projedeki çalışanlardan hangisinin proje üzerinde yapmış olduğu değişiklikleri göstermeyi sağlar. Bu sayede projenin hızlı bir şekilde gelişimini sağlar.
  • Projede hatayla karşılaştığımız durumlarda eski kod kaydına dönmemizi sağlar. Bu sayede projeyi baştan yazmak yerine kısaca bir değişiklik sayesinde eski koda dönüp projenize devam edebilirsiniz.
  • Dosyalardaki her değişimin neden olduğunu rahatlıkla anlamayı sağlıyor.
  • Kodlarımızı yedekleme imkanı sunmaktadır.

Github Nedir?

Github, dünyanın en büyük geliştirici topluluklarından birisi olup, git versiyon kontrol sistemini kullanarak yazılım geliştirme projeleri için web tabanlı bir bulut depolama servisidir. Tüm projelerimizi ister herkese açık bir şekilde ya da kendinizin çalışabileceği gizli bir şekilde dosyalarınızı Github üzerinde yedekleyebilirsiniz.

GitHub ile dünya üzerinde projenizin herkes tarafından görülmesini, değerlendirilmesi sağlama imkanı sunuyor. GitHub üzerinde paylaşılan kodlar ile kendinizi geliştirebilirsiniz ve hatta eklemeler yapabilirsiniz. Öncelikli olarak GitHub kullanabilmek için bir hesap oluşturmanız gerekmektedir. Aşağıdaki bağlantıdan Github hesabınızı oluşturabilirsiniz.

Github aynı zamanda yazılımcıların bir CV’sidir. Github’a kayıt olunca aşağıdaki gibi bir ekran gelecektir. Eğer birilerini takip etmiyorsanız bu ekran boş gözükecektir.

Repository (Depo) Nasıl Oluşturulur?

Github’a hesabınızla giriş yaptıktan sonra aşağıdaki gibi bir ekran olacak. Sağ üst tarafta profil resminizin solunda bulunan “ + “ butonuna tıklayıp “New repository” dedikten sonra yeni deponuzu oluşturabilirsiniz. Yeni bir repository oluştururken aşağıdaki ekran karşınıza gelecektir. Bu sayfa sayesinde Proje adınızı, proje özetinizi, bu proje public mi private mi olacak buna karar verebilirsiniz. .gittignore ise bazı projelerde node_modules gibi kütüphanelerin bulunduğu dosyayı yüklemiyoruz.

Git Komutları

1. git config

Bu komutla verdiğiniz değerler ile birlikte kullanılacak yazar adını ve e-posta adresini sırasıyla ayarlar. Bunu ayarlamanın faydası bir IDE açtığınızda sizin Github hesabınızla senkronizasyonunu hızlandırır.

git config -–global user.name “[isim]”  
git config -–global user.email “[e-posta adresi]”

2. git init

Bu komut yeni bir depo başlatmak için kullanılır.

Bir klasör oluşturup içerisinde

git init

fonksiyonu çalıştırdığımızda .git ufak bir dosya sistemi içerir.

Bu klasörün içerisinde dosyalarınızın state(versiyonlarını) tutacaktır.

  • Bu dosyalar arasındaki farklar,
  • commit sırasındaki kesitler

hepsi bu dosyalar içerisinde tutulmaktadır. Bunu bir projemizde gözlemleyelim. Bir .git dosyası içindeki görünümü bu şekilde olabilir.

3. git add .

Bu komutla dosyalarımız da değişiklik yaptıktan sonra dosyalarımızı stage edebiliriz. Add olmadan önce dosyalarımız unstaged’dır. Kullanımı:

git add .

4. git status

Bu komut, işlenmesi gereken tüm dosyaları listeler. Aşağıdaki gibi çalışır. Aslında projemizde .git dosyası olup olmadığının kontrolünü sağlıyor.

git status

5. git commit

Bu komut, dosyayı sürüm geçmişinde kalıcı olarak kaydeder veya anlık görüntüler. Kullanımı:

git commit -m “[Commit mesajınız]”

Yukarıdaki repomda eğer bir değişiklik yapmış olsam kayıt edecekti. Ama bana zaten bu dosyaların en güncel hali değişim yapmadın diyor.

6. git remote

Bu komut, yerel depomuzu uzak sunucuya bağlamak için kullanılır. Kullanımı

git remote add [variable name] [Uzak Sunucu Linki]

7. git push

Bu komut, kodumuzda yaptığımız değişiklikleri Github’a aktarmayı sağlar. Kullanımı:

git push

8. git logs

Bu komut, dosyada yapılan tüm commit değişikliklerini göstermeyi sağlar. Kullanımı:

git log

9. git pull

Bu komut, uzak sunucudaki değişiklikleri bilgisayarımıza almamızı sağlar. Kullanımı

git pull

10. git fetch

Bu komut, uzak sunucudaki dosyalarımız ile bilgisayarımızdaki dosyaları karşılaştırarak günceller. Kullanımı

git fetch

git fetch komutu git pull komutuna göre daha güvenli bir şekilde çalışır.

11. git clone

Bu komut, mevcut bir URL’de bulunan repoyu local bilgisayarımıza taşımayı sağlamaktadır. Kullanımı

git clone [url]

Aynı zamanda kod kullanmadan yapma yöntemi de bulunuyor. Kodları Github Desktop yardımıyla, IDE yardımıyla ya da zip şeklinde indirerek kendi bilgisayarımıza alabiliyoruz.

Bir diğer yöntemde Github Fork ile kodları kendi repomuza çekmektir. Fork özelliğini kullanmanın temelde iki sebebi olabilir.
1. Projenin bir kopyasını üzerimize alıp, o kopyadan o sürümden çalışmak.
2. Fork ile alınan projenin üzerinde değişiklik yapıp, proje sahibine geri gönderip, onun onayına sunup, projenin geliştirilmesine katkı sağlamak için kullanabiliriz.

Fork butonuna tıkladığınız zaman başkasının projesini kendinize almayı sağlar. Star ise sosyal medyadaki beğeni butonu gibi düşünebiliriz.

12. git stash

Bu komut, değiştirilen tüm izlenen dosyaları geçici olarak saklar. Kullanımı

git stash

13. git tag

Bu komut, belirtilen işleme etiket vermek için kullanılır. Kullanımı:

git tag [commitID]

14. git revert

Bu komut ile commit ettiğiniz herhangi bir değişikliği geri almak için kullanılır. Bu komut ile commit işleminizin kendisi veya bilgileri silinmez sadece commit işleminizdeki değişiklik geri alınır. Kullanımı:

git revert [commitID]

Branch Yapısı

Branch yapısını aslında bir repo oluşturduğumuz zaman her zaman kullanıyoruz. Tüm commitlerimiz eğer farklı bir branch açmadıysak master üzerinde toplanır. Master branchi projelerdeki tüm kodların toplandığı ana branch olarak bilinir.

Master haricinde bulunan bazı branchler ve bu branchlerin ne işe yaradığını anlatmaya çalışayım.

  • Release branch : Gelecek versiyonda yayınlacak yeni güncellemeyi desteklemek amacıyla kullanılır.
  • Feature branch : Uygulamamızın gelecek versiyonunda eklemeyi plandığımız özellikleri geliştiriğimiz branch modelidir.
  • Hotflix branch : Canlı uygulama da bulunan kritik bir bug’ u çözmek amacıyla oluşturulur.

Merge Kavramı

Merge tüm dalları birleştirip master branchinde toplamayı sağlamaktır.

15. git branch

Bu komut, geçerli depodaki tüm yerel dalları listelemek için kullanılır. Kullanımı

git branch

Aşağıdaki komut ile yeni bir dal oluşturur. Master dalı haricinde farklı bir dal üzerinde çalışılır.

git branch [branch name]

Mesela bir ekip çalışmasında olduğumuzu düşünelim. Her birimiz birer branch üzerinde çalıştığımızı varsayarsak her branchte yaptığımız değişikliği pull request yaparak master branchine geçirilir. Bu sayede projenin tamamı master branchinde yer alır.

15. git switch

Bu komut, branchlerimiz arasındaki geçisi sağlamak amacıyla kullanılır. Kullanımı:

git switch [branch_name]

Git Merge Çakışmaları (Conflict)

İki kişi aynı dosyayı ve aynı satırı değiştirirse ve git otomatik olarak merge edemezse bu durumda conflict yani çakışma olacaktır. Bu durumda çakışma yaşayan kişi gerekirse ekipteki diğer kişi ile beraber oturup çakışmayı çözdükten sonra merge işlemine devam etmelidir.

16. git merge

Git’de merge işlemi başka bir branch’deki değişiklikleri üzerinde çalıştığınız kendi branch’inize entegre etme işlemidir.

Bu komut, belirtilen dalın geçmişini geçerli dalla birleştirir. Kullanımı:

git merge [branch name]

17. git checkout

git checkout komutu önceki commitlere dönme imkanı sağlar. Kullanımı:

git checkout [commitID]

18. git diff

Kendi local bilgisayarımızda yaptığımız değişiklikler neticesinde, projeyi yönlendirdiğimiz repo arasında oluşan farkları gösterir. Hangi satırı sildiğimiz, hangi satırı eklediğimiz vs. bilgilerini içerir.

git diff [dosya_adı]

19. git rebase

Bu komut ile Git öncelikle Branch-A ile Branch-B’nin ortak en son commit’ini bulup ortak commit sonrasında Branch-A’da yapılan diğer tüm commit’leri geri alır. Aslında bu commitler silinmez sadece geçici olarak farklı bir yerde saklanır. Asla kullanmamız gereken konu başka insanlarla çalışma yapıyorsak projeyi darmadağın edebilir.

README.md Dosyası

README dosyası bilgisayar yazılımının bir dizinindeki veya arşivindeki diğer dosyalar hakkında bilgi içeren, düz metin dosyası şeklinde bir belgedir. Bu sayede projeler hakkında bilgi sahibi olarak diğer kişilerin rahatlıkla projemizi anlamalarını kolaylaştırır.

Bir readme.md örneği

README.md Dosyasını Biçimlendirme

Başlık Ekleme

Başlık eklemek için # işareti kullanılır. Bu işaret html de ki başlık etiketlerine (h tagları) denk gelmektedir. Aynı zamanda isterseniz HTML taglarını kullanarak başlık eklemekte mümkündür.

# Başlık 1
## Başlık 2
### Başlık 3
#### Başlık 4
##### Başlık 5
###### Başlık 6

Yazı Stili Verme

Kod Bloğu Eklemek

```javascript 
if (isAwesome){
return true
}
```

Listeleme

Sırasız liste yapmak için — kullanılır. Sıralı liste içinse 1 2 3 şeklinde yazarız. Sırasız liste örneği

- 100 Gün boyunca çalışmalarımı buradan takip edebilir, hızlı bir şekilde tekrar yapabilir veya paylaştığım kaynaklardan yararlanabilirsiniz.
- Her gün yapılanlar gün ayrılmıştır. Her günün konu kapsamı aşağıdaki gibi sıralanabilir.
- Bu 100 günlük süreçte Emre Altunbilek, Kasım Adalan, Veli Bacık, Gazihan Alankuş ve Angela Yu'nun içeriklerinden faydalanarak hazırlanılmıştır. Eğer faydasını görürseniz repoyu yıldızlamayı unutmayın.

Resim Ekleme

<img src="https://miro.medium.com/max/1179/1*96UcmD4sxlB8on8LcsEteA.png">

Daha fazla bilgi sahibi olmak isterseniz aşağıdaki linkten Github markdown dokümantayonunu okuyabilirsiniz.

Sizde birisi profilinize girince aşağıdaki gibi bir görünümle karşılaşmasını ister miydiniz?

Bunu yapmanın yolu çok basit aslında kullanıcı adınızla bir repo oluşturuyorsunuz ve bu sayede ana sayfanızda bu şekilde olmasını sağlamış oluyorsunuz. Mesela benim kullanıcı adım berkcangumusisik bu yüzden berkcangumusisik isimli bir repo oluşturdum ve kodlarımı yazarak bu hale getirdim. Kodların örneğini aşağıya bırakıyorum.

<h1 align="center">Merhaba 👋, Ben Berkcan Gümüşışık </h1>
<a target="_blank"><img align="left" height="400" width="400" alt="𝙶𝙸𝙵" src="https://github.com/JayantGoel001/JayantGoel001/blob/master/GIF/github.gif"></a>
<br/>

### Ben Kimim
- :computer:Gazi Üniversitesi Bilgisayar ve Öğretim Teknolojileri Eğitimi 4. sınıf öğrencisiyim.
- :computer:YetGen lideriyim.
- :computer:Full Stack Developer olmak için çabalıyorum.
- :computer:Kendimi her alanda geliştirmeye çalışıyorum.
- 📫 Bana ulaşmak isterseniz **gumusisikberkcan@gmail.com** adresini kullanabilirsiniz.

***:computer: DON'T REPEAT YOURSELF(KENDİNİ TEKRAR ETME)***
<br>

***Bölümüm öğretmenlik olsada ideallerimden asla vazgeçemem.:medal_military:***

<p align="center">
<img src= "https://gpvc.arturio.dev/berkcangumusisik" alt="𝚙𝚛𝚘𝚏𝚒𝚕𝚎 𝚟𝚒𝚎𝚠𝚜"> •
<img alt="𝙶𝚒𝚝𝙷𝚞𝚋 𝚏𝚘𝚕𝚕𝚘𝚠𝚎𝚛𝚜" src="https://img.shields.io/github/followers/kullaniciAdi?label=Followers&style=social"> •
<img src="https://img.shields.io/github/stars/kullaniciAdi?label=Stars" alt="𝚃𝚘𝚝𝚊𝚕 𝚂𝚝𝚊𝚛𝚜">
</p>

<h1 align="center"> 💻Berkcan Gümüşışık</h1>
<p align="center">
<a href="https://github.com/kullaniciAdi">
<img height="150em" src="https://github-readme-stats.vercel.app/api?username=kullaniciAdi&show_icons=true&theme=react&include_all_commits=true&count_private=true"/>
<img height="110em" src="https://user-images.githubusercontent.com/74311713/129813126-5c620ff2-cc3b-47a2-b419-974708ceb5fe.png"/>
<img height="160em" src="https://github-readme-stats.vercel.app/api/top-langs/?username=kullaniciAdi&layout=compact&langs_count=16&theme=react"/>
</div>
</p>

<h2 align="center">🤝Sosyal Medya Hesaplarım </h2>
<p align="left">
<a href="https://www.linkedin.com/in/berkcan-gumusisik/" target="blank"><img align="center" src="https://velanovascular.com/wp-content/uploads/2020/06/LinkedIn.png" height="30" width="30" /></a>
<a href="https://instagram.com/berkcangumusisik" target="blank"><img align="center" src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Instagram_logo_2016.svg/1200px-Instagram_logo_2016.svg.png" height="30" width="30" /></a>
<a href="https://medium.com/@gumusisikberkcan" target="blank"><img align="center" src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/medium.svg" height="30" width="40" />
</a>
</p>

<h2 align="center">Languages & Frameworks</h2>

<p align="center">

<code><img height="40" width="40" src="https://cdn.icon-icons.com/icons2/2415/PNG/512/csharp_original_logo_icon_146578.png"></code>
<code><img height="40" width="40" src="https://cdn.iconscout.com/icon/free/png-256/java-60-1174953.png"></code>
<code><img height="40" width="40" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/python/python.png"></code>
<code><img height="40" width="40" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/javascript/javascript.png"></code>
<code><img height="40" width="40" src="https://cdn.iconscout.com/icon/free/png-256/css-131-722685.png"></code>
<code><img height="40" width="40" src="https://res.cloudinary.com/startup-grind/image/upload/c_fill,dpr_3,f_auto,g_center,h_175,q_auto:good,w_175/v1/gcs/platform-data-dsc/events/flutterlogo_Ni49mu8.png"></code>
<code><img height="40" width="40" src="https://i.pinimg.com/originals/9b/fc/ab/9bfcabbfd10b16693e622045fe6b812d.png"></code>
</p>

<h2 align="center">⚡ Database</h2>

<p align="center">

<code><img height="40" width="40" src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/1200px-Postgresql_elephant.svg.png"></code>
<code><img height="40" width="40" src="https://img.icons8.com/color/480/microsoft-sql-server.png"></code>

</p>

<h2 align="center">👩‍💻 Kullandığım IDE Çeşitleri</h2>

<p align="center">

<code><img height="40" width="40" src="https://static.wikia.nocookie.net/logopedia/images/e/e4/Visual_Studio_2013_Logo.svg/revision/latest/scale-to-width-down/250?cb=20191221122625"></code>
<code><img height="40" width="40" src="https://img.utdstc.com/icon/ebd/c75/ebdc759e8c0dd0f603ea13620f6f2ff5221bc73ac9a823e9356ca7e09b90488a:200"></code>
<code><img height="40" width="40" src="https://brandslogos.com/wp-content/uploads/images/eclipse-logo-vector.svg"></code>

</p>
<h2 align="center">👩‍🖍📐 Design</h2>

<p align="center">

<code><img height="40" width="40" src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Adobe_Photoshop_CC_icon.svg/1200px-Adobe_Photoshop_CC_icon.svg.png"></code>
<code><img height="40" width="40" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQIbMt0PbIuYZFwggnJtEI2ROZ9IuOwWjMCZBE6DIlHcYD1Lg-mX5az3Nd7uHJHIfUyztY&usqp=CAU"></code>

</p>

Git ve Github’ın IDE’ler ile kullanımı daha kolay olduğu için her seferinde Git Bash kullanmadan daha hızlı işlerinizi gerçekleştirebilirsiniz. Ama normal hayatta yukarıdaki öğrendikleriniz IDE bağımsız bir şekilde kullanmamızı sağlıyor. VSCode ile kullanımı için aşağıdaki eğitimi takip etmenizi öneririm.

Github’ın Kariyere Etkisi

Tüm yapılan projeleri Github üzerinden paylaşarak bir portföy oluşturabilmek çok iyi olacaktır. Diğer insanlar bizim repomuzdan faydalanabilirler aynı zamanda bizlere iş imkanı sunmaktadır. Ben şu dilleri diyebiliyorum demeyi sağlayacaktır. Yazılım dünyasında ön plana çıkaracaktır.

En iyi kodumu paylaşmalıyım diye düşünmemek gerekiyor. Burada önemli olan yazılımdaki gelişimi göstermektir.

Ayrıca öğrenciler için Github Students Pack desteğiyle Canva, JetBrains gibi birçok ürünü ücretsiz kullanma imkanı sunmaktadır. Bu avantajı öğrencilerine sunduğu için kaçırmamanızı öneririm. Aşağıdaki linkten inceleyebilirsiniz.

Kısa Bir Kapanış

Bu yazımızda Git ve Github konularını detaylıca inceledik. Geniş Türkçe bir doküman hazırlama gereksinimi duydum. Çünkü git ve github yazılımcılar için önem arz etmektedir. Umarım faydalı bir içerik olmuştur. Sorularınız olursa bana sosyal medya hesaplarımdan ulaşabilirsiniz. Github hesabımı aşağıya bırakıyorum.

--

--