Takip et

Git ve GitHub’ı Anlamak: Kodunuzu Pushing, Pulling ve Takip Etme Rehberi (Başlangıç Seviyesi)

Git ve GitHub’ı Anlamak: Kodunuzu Pushing, Pulling ve Takip Etme Rehberi (Başlangıç Seviyesi) Günümüz yazılım geliştirme dünyasında, kod yöneti…

Git ve GitHub’ı Anlamak: Kodunuzu Pushing, Pulling ve Takip Etme Rehberi (Başlangıç Seviyesi)

Günümüz yazılım geliştirme dünyasında, kod yönetimi ve ekip içinde ortak çalışma, projelerin başarısı için kritik öneme sahiptir. İşte tam bu noktada Git ve GitHub devreye girer. Git, kodunuzun tüm değişikliklerini takip etmenizi, farklı versiyonlarını yönetmenizi ve kolayca geri dönmenizi sağlayan güçlü bir versiyon kontrol sistemidir. GitHub ise bu Git depolarını barındıran, ekiplerin birlikte çalışmasını kolaylaştıran ve projeleri dünyaya açan popüler bir platformdur. Bu makalede, Git ve GitHub’ın temel prensiplerini, kodunuzu nasıl takip edeceğinizi, değişiklikleri nasıl yükleyeceğinizi (push) ve indireceğinizi (pull) adım adım keşfedecek, yazılım geliştirme yolculuğunuzda size sağlam bir başlangıç noktası sunacağız.

Git Nedir ve Neden Kullanmalıyız?

Git, Linus Torvalds tarafından 2005 yılında Linux çekirdeğinin geliştirilmesi için oluşturulmuş, açık kaynaklı, dağıtık bir versiyon kontrol sistemidir (VCS). Bir projenin zaman içindeki tüm değişikliklerini kaydetmenize, bu değişiklikleri takip etmenize ve gerektiğinde önceki versiyonlara geri dönmenize olanak tanır.

Versiyon Kontrol Sistemi (VCS) Nedir?

Bir versiyon kontrol sistemi, belgelerdeki, kodlardaki ve diğer dosyalardaki değişiklikleri zaman içinde yönetmek için kullanılan bir sistemdir. Bir projenin her bir “anlık görüntüsünü” (snapshot) kaydeder, böylece istediğiniz zaman projenin herhangi bir önceki durumuna dönebilirsiniz. Bunu, bir belgenin farklı versiyonlarını kaydettiğiniz bir “zaman makinesi” gibi düşünebilirsiniz.

Git’in Avantajları

Git’i kullanmanın birçok avantajı vardır:

  • Değişiklik Takibi: Kimin ne zaman, hangi değişikliği yaptığını kolayca görebilirsiniz.
  • Geri Alma Yeteneği: Hatalı bir değişiklik yaptığınızda, projenizi kolayca önceki bir çalışma durumuna geri döndürebilirsiniz.
  • Ortak Çalışma: Birden fazla geliştiricinin aynı proje üzerinde eş zamanlı ve sorunsuz bir şekilde çalışmasını sağlar.
  • Dallanma (Branching): Ana kod tabanını etkilemeden yeni özellikler geliştirmek veya hataları düzeltmek için paralel çalışma alanları oluşturmanıza olanak tanır.
  • Dağıtık Yapı: Her geliştiricinin kendi yerel makinesinde projenin tam bir kopyasına sahip olması, merkezi bir sunucunun çökmesi durumunda bile veri kaybını önler.

Temel Git Kavramları

Git dünyasında sıkça karşılaşacağınız bazı temel kavramlar şunlardır:

  • Depo (Repository): Projenizin tüm dosyalarını ve Git’in bu dosyaların geçmişini sakladığı yerdir.
  • Commit: Projenin belirli bir anındaki değişikliklerin kaydedilmiş halidir. Bir “anlık görüntü” gibi düşünebilirsiniz.
  • Branch (Dal): Geliştirme akışının ana hattan ayrılan paralel bir versiyonudur. Genellikle yeni özellikler veya hata düzeltmeleri için kullanılır.
  • Merge (Birleştirme): Farklı branch’lerde yapılan değişiklikleri bir araya getirme işlemidir.

GitHub Nedir ve Git ile İlişkisi?

Git bir versiyon kontrol sistemi iken, GitHub bu Git depolarını barındıran ve ekiplerin ortak çalışmasını sağlayan bulut tabanlı bir platformdur. Git’i yerel makinenizde kodunuzu yönetmek için kullanırken, GitHub’ı bu kodunuzu yedeklemek, başkalarıyla paylaşmak ve işbirliği yapmak için kullanırsınız.

Bulut Tabanlı Depolama ve Ortak Çalışma Platformu

GitHub, Git depolarınızı internet üzerinde barındırarak, projenizin her yerden erişilebilir olmasını sağlar. Bu sayede:

  • Kodunuzu güvenli bir şekilde yedeklersiniz.
  • Farklı coğrafyalardaki ekip üyeleri aynı proje üzerinde çalışabilir.
  • Projenizin web tabanlı bir arayüz üzerinden kolayca yönetilmesini sağlar.

Sosyal Kodlama ve Açık Kaynak Topluluğu

GitHub, sadece bir depolama alanı olmanın ötesinde, büyük bir geliştirici topluluğuna ev sahipliği yapar. Açık kaynak projelerin merkezi haline gelmiştir. GitHub üzerinde:

  • Pull Request (Çekme İsteği): Başkalarının projelerine katkıda bulunmak için değişikliklerinizi sunabilirsiniz.
  • Issue Tracking: Hataları veya yeni özellik taleplerini takip edebilirsiniz.
  • Stargazing: Beğendiğiniz projelere yıldız vererek onları destekleyebilirsiniz.

GitHub Hesabı Oluşturma ve İlk Adımlar

GitHub kullanmaya başlamak için öncelikle github.com adresinden ücretsiz bir hesap oluşturmanız gerekir. Hesap oluşturduktan sonra, yeni bir depo (repository) oluşturarak veya mevcut bir depoyu klonlayarak projelerinizi yönetmeye başlayabilirsiniz.

Git Temelleri: Repolar, Commitler ve Branchler

Git ile çalışmaya başlamadan önce, temel yapı taşlarını iyi anlamak önemlidir. Bunlar, deponuz, commitleriniz ve branchlerinizdir.

Depo (Repository) Nedir?

Bir Git deposu, projenizin tüm dosyalarını, klasörlerini ve bu dosyaların zaman içindeki tüm değişiklik geçmişini barındıran bir veritabanıdır. Projenizin “kalbi” diyebiliriz. İki tür depo vardır:

  • Yerel Depo (Local Repository): Kendi bilgisayarınızda bulunan projenizin Git ile takip edilen kopyasıdır.
  • Uzak Depo (Remote Repository): GitHub gibi bir platformda barındırılan, projenizin internet üzerindeki kopyasıdır.

Yeni bir Git deposu başlatmak için projenizin kök dizininde aşağıdaki komutu kullanırsınız:

git init


Bu komut, projenizin içine gizli bir .git klasörü oluşturur ve projenizi Git tarafından takip edilebilir hale getirir.

Commitler: Değişikliklerin Kaydı

Commit, projenizin belirli bir anındaki değişikliklerin bir "anlık görüntüsü" veya "kayıt noktası"dır. Her commit, projenin o anki durumunu temsil eder ve bir mesajla açıklanır. Bu mesaj, o commit'te ne gibi değişiklikler yapıldığını özetlemelidir. Anlamlı commit mesajları yazmak, projenizin geçmişini anlamayı çok kolaylaştırır.

Branchler: Paralel Geliştirme Yolları

Branch'ler, bir projenin ana geliştirme akışından (genellikle main veya master olarak adlandırılır) ayrılan paralel çalışma yollarıdır. Yeni bir özellik geliştirmek, bir hatayı düzeltmek veya deneysel çalışmalar yapmak için bir branch oluşturabilirsiniz. Bu sayede ana kod tabanını bozmadan güvenle çalışabilirsiniz. İşiniz bittiğinde, bu branch'teki değişiklikleri ana branch ile birleştirebilirsiniz (merge).

Kod Takibi: Git'in Kalbi

Git'in en temel işlevi, projenizdeki dosyaların durumunu takip etmektir. Git, dosyalarınızı üç ana durumda ele alır: Çalışma Dizini (Working Directory), Hazırlık Alanı (Staging Area) ve Depo (Repository).

Çalışma Dizini, Hazırlık Alanı ve Depo

* Çalışma Dizini (Working Directory): Projenizin bilgisayarınızda gördüğünüz, üzerinde aktif olarak çalıştığınız dosyaları içerir.
* Hazırlık Alanı (Staging Area / Index): Çalışma dizinindeki değişikliklerden hangilerinin bir sonraki commit'e dahil edileceğini seçtiğiniz ara bölgedir.
* Depo (Repository): Commit edilmiş tüm değişikliklerin kalıcı olarak saklandığı yerdir.

git status ile Çalışma Durumunu Görüntüleme

git status komutu, projenizin mevcut durumunu gösterir. Hangi dosyaların değiştirildiğini, hangilerinin commit için hazırlandığını (staged) ve hangilerinin henüz takip edilmediğini (untracked) listeler. Bu komut, bir sonraki adımınızı belirlemeniz için çok önemlidir.

git status


Örnek çıktı:

On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   index.html

Untracked files:
  (use "git add ..." to include in what will be committed)
        style.css

no changes added to commit (use "git add" and/or "git commit -a")

git add ile Değişiklikleri Hazırlama (Staging)

Çalışma dizininizde yaptığınız değişiklikleri commit etmek için öncelikle bu değişiklikleri hazırlık alanına almanız gerekir. git add komutu bunun için kullanılır.

Belirli bir dosyayı hazırlamak için:

git add index.html


Tüm değiştirilmiş ve yeni dosyaları hazırlamak için (genellikle tercih edilir):

git add .

git commit ile Değişiklikleri Kaydetme

Hazırlık alanındaki değişiklikleri yerel deponuza kalıcı olarak kaydetmek için git commit komutunu kullanırsınız. Her commit'e, o commit'te yapılan değişiklikleri açıklayan kısa ve öz bir mesaj eklemek zorunludur.

git commit -m "Ana sayfa tasarımı güncellendi ve yeni CSS dosyası eklendi."


Bu komut, hazırlık alanındaki tüm değişiklikleri tek bir commit olarak kaydeder ve verdiğiniz mesajı bu commit'e ekler.

Kod Paylaşımı: Pushing ve Pulling

Git'i tek başınıza kullanmak bile faydalı olsa da, gerçek gücü ortak çalışma yeteneğinde yatar. Bu da push ve pull işlemleriyle sağlanır.

Uzak Depo (Remote Repository) Kavramı

Bir uzak depo, projenizin GitHub gibi bir sunucuda barındırılan kopyasıdır. Yerel deponuzdaki değişiklikleri bu uzak depoya "iter" (push) veya uzak depodaki değişiklikleri kendi yerel deponuza "çekersiniz" (pull). Genellikle uzak deponuz origin olarak adlandırılır.

Uzak deponuzu yerel deponuza bağlamak için şu komutu kullanırsınız (GitHub'dan aldığınız URL ile):

git remote add origin https://github.com/kullaniciadi/depoadi.git

git push ile Yerel Değişiklikleri Uzak Depoya Yükleme

Yerel deponuzda yaptığınız ve commit ettiğiniz değişiklikleri uzak depoya göndermek için git push komutunu kullanırsınız. Bu, çalışmalarınızı başkalarıyla paylaşmanın ve yedeklemenin yoludur.

git push origin main


Bu komut, main branch'indeki yerel commit'lerinizi origin adlı uzak depoya gönderir. İlk kez push yaparken git push -u origin main kullanmanız gerekebilir, bu, yerel branch'inizi uzak branch'e bağlar.

git pull ile Uzak Depodaki Değişiklikleri İndirme

Başkalarının uzak depoya yaptığı değişiklikleri kendi yerel deponuza indirmek ve projenizi güncellemek için git pull komutunu kullanırsınız. Bu komut aslında iki işlemi bir arada yapar: önce git fetch ile uzak depodaki değişiklikleri indirir, ardından git merge ile bu değişiklikleri kendi yerel branch'inizle birleştirir.

git pull origin main


Bu komut, origin uzak deposundaki main branch'indeki en son değişiklikleri yerel main branch'inize çeker ve birleştirir.

git clone ile Mevcut Bir Depoyu Kopyalama

Mevcut bir Git projesine ilk kez başlıyorsanız veya bir projenin tam bir kopyasını almak istiyorsanız, git clone komutunu kullanırsınız. Bu komut, uzak depodaki tüm dosyaları ve tüm Git geçmişini yerel makinenize indirir ve otomatik olarak bir yerel depo oluşturur.

git clone https://github.com/kullaniciadi/depoadi.git


Bu komut, belirtilen URL'deki depoyu bilgisayarınıza kopyalar ve o depoyla ilgili tüm Git ayarlarını yapar.

Ortak Çalışma ve Çatışma Çözümü

Git ve GitHub'ın en büyük avantajlarından biri, ekiplerin birlikte sorunsuz bir şekilde çalışmasını sağlamasıdır. Ancak, birden fazla kişi aynı kod üzerinde çalıştığında bazı durumlar ortaya çıkabilir.

Forking ve Pull Request (Çekme İsteği)

Açık kaynak projelerine katkıda bulunmak veya bir projenin kendi bağımsız versiyonunu oluşturmak istediğinizde "forking" işlemi devreye girer. Bir depoyu fork ettiğinizde, o deponun kendi GitHub hesabınızda bir kopyasını oluşturursunuz. Bu kopyada istediğiniz değişiklikleri yapabilir, commit edebilir ve kendi deponuza push edebilirsiniz.

Değişiklikleriniz ana projeye dahil edilmeye hazır olduğunda, orijinal deponun sahiplerine bir "Pull Request" (Çekme İsteği) gönderirsiniz. Bu, değişikliklerinizin incelenmesini ve ana projeye birleştirilmesini talep ettiğiniz resmi bir yoldur.

Merge Çatışmaları (Merge Conflicts) ve Çözümü

Birden fazla geliştirici aynı dosyanın aynı satırlarında değişiklik yaptığında ve bu değişiklikler birleştirilmeye (merge) çalışıldığında "merge çatışmaları" ortaya çıkar. Git, hangi değişikliğin doğru olduğuna karar veremediği için birleştirme işlemini durdurur ve çatışmayı sizin çözmenizi ister.

Çatışmalar genellikle dosya içinde özel işaretleyicilerle (<<<<<<<, =======, >>>>>>>) gösterilir. Bu işaretleyiciler arasındaki kodları düzenleyerek, hangi versiyonun kalacağına karar verirsiniz. Çatışmayı çözdükten sonra, dosyayı git add ile hazırlık alanına alır ve git commit ile yeni bir birleştirme commit'i oluşturursunuz.

En İyi Uygulamalar ve İpuçları

Git ve GitHub'ı verimli kullanmak için bazı en iyi uygulamaları benimsemek, iş akışınızı büyük ölçüde iyileştirecektir.

Anlamlı Commit Mesajları Yazın

Her commit'in bir hikayesi olmalıdır. Ne yaptığınızı, neden yaptığınızı ve hangi sorunu çözdüğünüzü açıklayan kısa ve öz commit mesajları yazın. Bu, projenin geçmişini anlamayı ve hataları ayıklamayı çok kolaylaştırır.

* Kısa bir başlık (50 karakteri geçmeyin).
* Bir boş satır.
* Daha detaylı açıklama (isteğe bağlı).

Örnek:

feat: Kullanıcı kayıt formu eklendi

Yeni kullanıcılar için kayıt formu oluşturuldu.
- Ad, soyad, e-posta ve şifre alanları eklendi.
- Basit istemci tarafı doğrulama (validation) uygulandı.

Küçük ve Sık Commitler Yapın

Büyük, kapsamlı değişiklikleri tek bir commit yerine, mantıksal olarak küçük parçalara bölerek sık sık commit yapın. Bu, hem değişiklikleri takip etmeyi kolaylaştırır hem de bir hata durumunda geri almayı veya düzeltmeyi çok daha basit hale getirir.

Branch Stratejilerini Kullanın

Karmaşık projelerde, main branch'i her zaman kararlı ve üretime hazır tutmak önemlidir. Yeni özellikler için feature branch'leri, hata düzeltmeleri için bugfix branch'leri oluşturmak gibi stratejiler benimseyin. Bu, ana kod tabanını güvende tutar ve paralel geliştirmeye olanak tanır.

.gitignore Dosyasını Kullanın

Projenizde Git tarafından takip edilmesini istemediğiniz dosyalar (örneğin, derlenmiş dosyalar, geçici dosyalar, loglar, hassas API anahtarları) olabilir. Bu dosyaları .gitignore adlı bir dosyaya ekleyerek Git'in onları yok saymasını sağlayabilirsiniz.

Örnek .gitignore içeriği:

# İşletim sistemi dosyaları
.DS_Store
Thumbs.db

# Node.js
node_modules/
npm-debug.log

# Ortam değişkenleri
.env

# Derlenmiş dosyalar
*.o
*.pyc

Sonuç

Git ve GitHub, modern yazılım geliştirmenin vazgeçilmez araçlarıdır. Bu makalede ele aldığımız temel kavramlar ve komutlar (pushing, pulling, tracking, committing) sayesinde, projelerinizi daha düzenli yönetebilir, ekip arkadaşlarınızla daha verimli çalışabilir ve kodunuzun güvenliğini sağlayabilirsiniz. Unutmayın, Git ve GitHub'ı öğrenmenin en iyi yolu pratik yapmaktır. Kendi küçük projelerinizi oluşturun, branch'ler açın, commit'ler yapın, push ve pull işlemlerini deneyimleyin. Bu sayede, zamanla bu güçlü araçlara hakim olacak ve yazılım geliştirme yolculuğunuzda önemli bir yetkinlik kazanacaksınız. Başarılar dileriz!

SSS (Sık Sorulan Sorular)

Git ve GitHub arasındaki temel fark nedir?

Git, yerel bilgisayarınızda çalışan, kodunuzun versiyonlarını takip eden bir versiyon kontrol sistemidir. GitHub ise bu Git depolarını internet üzerinde barındıran, ortak çalışmayı ve kod paylaşımını sağlayan bulut tabanlı bir platformdur. Git bir araç, GitHub ise bu aracı kullanarak kodunuzu barındırdığınız ve yönettiğiniz bir hizmettir.

git pull ve git fetch arasındaki fark nedir?

git fetch, uzak depodaki değişiklikleri yerel deponuza indirir ancak bu değişiklikleri yerel çalışma dizininizle veya branch'inizle birleştirmez. Sadece "neler değiştiğini" görmenizi sağlar. git pull ise git fetch işlemini yapar ve ardından indirilen değişiklikleri otomatik olarak mevcut yerel branch'inizle birleştirir (git merge).

Bir commit'i geri alabilir miyim?

Evet, Git'te commit'leri geri almanın birkaç yolu vardır. En yaygın olanları git revert ve git reset komutlarıdır. git revert, yeni bir commit oluşturarak önceki bir commit'in değişikliklerini geri alır. git reset ise commit geçmişini değiştirerek belirli bir noktaya geri döner. git reset komutu dikkatli kullanılmalıdır, özellikle ortak çalışılan branch'lerde.

Birden fazla kişi aynı anda aynı dosyanın farklı yerlerinde çalışırsa ne olur?

Git, genellikle bu tür durumları otomatik olarak birleştirebilir. Örneğin, bir kişi dosyanın başında değişiklik yaparken, diğeri sonunda değişiklik yaparsa, Git bu değişiklikleri sorunsuz bir şekilde birleştirir. Ancak, aynı dosyanın aynı satırlarında değişiklik yapıldığında "merge çatışması" (merge conflict) oluşur ve Git, hangi değişikliğin kalacağına sizin karar vermenizi ister.

main (veya master) branch'i neden bu kadar önemli?

main branch'i, çoğu projede projenin ana, kararlı ve genellikle dağıtıma hazır olan kod tabanını temsil eder. Bu nedenle, main branch'ine yapılan değişikliklerin çok dikkatli olması ve genellikle diğer branch'lerde test edildikten sonra birleştirilmesi önemlidir. Diğer branch'ler, yeni özellikler veya hata düzeltmeleri için geçici çalışma alanları olarak kullanılır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.