-
1. BaÅlangıƧ
- 1.1 Sürüm Denetimi
- 1.2 Gitāin Kısa TarihƧesi
- 1.3 Git Nedir?
- 1.4 Komut Satırı
- 1.5 Gitāi Yüklemek
- 1.6 Gitāi İlk Defa Kurmak
- 1.7 Yardım Almak
- 1.8 Ćzet
-
2. Git Temelleri
-
3. Git Dalları
- 3.1 Dallar
- 3.2 Kısaca Dallandırma ve BirleÅtirme Temelleri
- 3.3 Dal Yƶnetimi
- 3.4 İŠAkıÅı Dallandırması
- 3.5 Uzak Dallar
- 3.6 Yeniden Temelleme (rebase)
- 3.7 Ćzet
-
4. Bir Sunucuda Git Kurma
-
5. DaÄıtık Git
-
6. GitHub
- 6.1 Bir Projeye Katkıda Bulunmak
- 6.2 Proje Bakımı
- 6.3 Kurumsal Yƶnetim
- 6.4 GitHubāı otomatikleÅtirme
- 6.5 Ćzet
-
7. Git AraƧları
- 7.1 Düzeltme Seçimi
- 7.2 EtkileÅimli İzlemleme (Staging)
- 7.3 Saklama ve Silme
- 7.4 ĆalıÅmanızı İmzalama
- 7.5 Arama
- 7.6 GeƧmiÅi Yeniden Yazma
- 7.7 Reset Komutunun Gizemleri
- 7.8 İleri Seviye BirleÅtirme
- 7.9 Rerere
- 7.10 Gitāle Hata Ayıklama
- 7.11 Alt Modüller
- 7.12 Demetleme (Bundling)
- 7.13 Git Nesnesini DeÄiÅtirme
- 7.14 Kimlik Bilgisi Depolama
- 7.15 Ćzet
-
8. Gitāi ĆzelleÅtirmek
-
9. Git ve DiÄer Sistemler
- 9.1 İstemci Olarak Git
- 9.2 Gitāe GeƧiÅ
- 9.3 Ćzet
-
10. Dahili Git Ćgeleri
- 10.1 Tesisat ve DƶÅeme (Plumbing ve Porcelain)
- 10.2 Git Nesneleri
- 10.3 Git Referansları
- 10.4 Packfiles
- 10.5 Refspec
- 10.6 Transfer Protokolleri
- 10.7 Bakım ve Veri Kurtarma
- 10.8 Ortam DeÄiÅkenleri
- 10.9 Ćzet
-
A1. Ek bƶlüm A: DiÄer Ortamlarda Git
- A1.1 Görsel Arayüzler
- A1.2 Visual Studio ile Git
- A1.3 Visual Studio Code ile Git
- A1.4 Eclipse ile Git
- A1.5 Sublime Text ile Git
- A1.6 Bash ile Git
- A1.7 Zsh ile Git
- A1.8 PowerShell ile Git
- A1.9 Ćzet
-
A2. Ek bƶlüm B: Gitāi Uygulamalarınıza Gƶmmek
- A2.1 Git Komut Satırı
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Ek bölüm C: Git Komutları
- A3.1 Kurulum ve Yapılandırma Komutları
- A3.2 Proje OluÅturma Komutları
- A3.3 Kısaca Poz (Snapshot) Alma
- A3.4 Dallandırma ve BirleÅtirme Komutları
- A3.5 Projeleri PaylaÅma ve Güncelleme Komutları
- A3.6 İnceleme ve KarÅılaÅtırma Komutları
- A3.7 Hata Ayıklama (Debugging) Komutları
- A3.8 Yamalama (Patching)
- A3.9 E-Posta Komutları
- A3.10 Harici Sistemler
- A3.11 Yƶnetim
- A3.12 Tesisat (Plumbing) Komutları
1.3 BaÅlangıƧ - Git Nedir?
Git Nedir?
Ćzetle Git nedir? Bu, ƶzümsemesi gerekli ve ƶnemli olan bir bƶlümdür. Ćünkü eÄer Gitāin ne olduÄunu, temellerini ve nasıl ƧalıÅtıÄını iyi anlarsanız, Gitāi etkili bir Åekilde kullanmak da muhtemelen sizin iƧin Ƨok daha kolay olacaktır. Gitāi ƶÄrenirken, mümkün olduÄunca diÄer Sürüm Denetim Sistemleriānden (CVS, Subversion veya Perforce gibi) bildiklerinizi aklınızdan Ƨıkarmaya gayret edin ki Gitāi daha berrak ve doÄru Åekilde ƶÄrenip kullanabilesiniz. Gitāin kullanıcı arayüzü diÄer Sürüm Denetim Sistemleriāne epey benzese de Git, bilgileri diÄerlerinden Ƨok daha farklı bir Åekilde depolar ve bu bilgiler hakkında daha farklı düÅünür. Bu yüzden bunun gibi farklılıkları anlamak Gitāi kullanırken kafanızın karıÅmasını engeller.SubversionPerforce
Farklılıklar DeÄil, Anlık Pozlar
Gitāin diÄer herhangi bir VCSāden (Subversion ve benzerleri dahil olmak üzere) en büyük farkı, Gitāin veriler hakkında düÅünme Åeklidir. DiÄer ƧoÄu sistem bilgileri dosya-bazlı deÄiÅim listesi Åeklinde saklar. Bu diÄer sistemler (CVS, Subversion, Perforce, Bazaar vd.) bilgileri dosya setleri ve o dosyalara zaman iƧinde yapılan deÄiÅiklikler Åeklinde saklar (Bu genellikle delta-bazlı sürüm denetimi Åeklinde tanımlanır).

Git, veriler hakkında bu Åekilde düÅünmez ve onları bu Åekilde saklamaz. Bunun yerine Git, verilerini daha Ƨok minyatür dosya sistemlerinin anlık gƶrüntüler serisi Åeklinde düÅünür ve o Åekilde saklar. Gitāle her katkı (katkı) iÅlediÄinizde ya da projenizin durumunu kaydettiÄinizde, Git kısaca tüm dosyalarınızın o an nasıl gƶründüÄünün fotoÄrafını Ƨeker ve o anlık gƶrünümün referansını saklar. Verimli olmak adına, eÄer dosyalar deÄiÅmemiÅse Git o dosyaları tekrar saklamaz, onun yerine o dosyaların halihazırda saklandıÄı referansa baÄlantı verir. Yani Git, verilerini daha Ƨok anlık gƶrüntü akıÅı (poz) olarak gƶrür.

Bu Git ve neredeyse diÄer tüm VCSāleri arasındaki en büyük ayrımdır. Bu da Gitāi, diÄer sistemlerin kendilerinden ƶnceki nesilden kopyaladıkları sürüm denetimi mirasını her yƶnünü yeniden deÄerlendirmesini saÄlar. Bƶylelikle Git, basit bir VCSādense, inanılmaz güçlü araƧlarla donatılmıŠminyatür bir dosya sistemi olmuÅtur. Gitādeki dallanmayı anlatırken verileriniz hakkında bu Åekilde düÅünmenin getirilerini keÅfedeceÄiz. Git Dalları
Neredeyse Her İÅlem Yereldir
Gitādeki ƧoÄu iÅlem ƧalıÅmak iƧin yalnızca yerel dosyalara ve kaynaklara ihtiyaƧ duyar. Genel olarak baÅka bir bilgisayardan sizin aÄınıza bilgi gelmesine ihtiyacınız yoktur. EÄer ƧoÄu iÅlemin aÄ gecikme yüküne sahip olduÄu bir CVCSāye (MerkezĆ® Versiyon Kontrol Sistemi) alıÅkınsanız; Gitāin bu yƶnü size, Gitāin Allah tarafından ilahi bir hız yeteneÄiyle kutsadıÄını düÅündürtecektir. Ćünkü projenizin tüm tarihƧesi tam olarak yerel diskinizdedir, ve ƧoÄu iÅlem de neredeyse anında gerƧekleÅir.
ĆrneÄin, projenin tarihƧesine gƶz atmak iƧin Gitāin sunucuya girip, tarihƧeye eriÅip size gƶstermesine gerek yoktur, onun yerine hızlıca sizin yerel veritabanınızdan okur. Bu da proje tarihƧesini neredeyse anında gƶrebildiÄiniz anlamına gelir. EÄer bir dosyanın mevcut sürümü ve bir ay ƶnceki sürümü arasındaki deÄiÅiklikleri gƶrmek isterseniz, Git, uzaktaki bir sunucuya bu iÅlemi yapması iƧin baÅvurmak ya da dosyanın eski versiyonunu uzaktaki sunucudan Ƨekip yerel diskte hesaplamak yerine, dosyanın bir ay ƶnceki haline hızlıca gƶz atıp yerel bir farklılık hesaplaması yapar.
Bu da Ƨevrim dıÅı ya da VPNāsizseniz bile yapamayacaÄınız Ƨok az Åey olduÄu anlamına geliyor. EÄer uƧak ya da trenle seyahat ederken biraz ƧalıÅmak isterseniz, yerel ortamınızda ƧalıÅıp commitleyebilir (yerel kopyanıza) ve internet baÄlantısı edindiÄinizde de onu internete yükleyebilirsiniz. EÄer eve giderseniz ve VPN istemciniz düzgün bir Åekilde ƧalıÅmazsa bile hĆ¢lĆ¢ yerel ortamınızda ƧalıÅabilirsiniz. DiÄer ƧoÄu sistemde ise bunları yapmak ya imkĆ¢nsız ya da Ƨok sancılıdır. ĆrneÄin Perforceāde, eÄer sunucuya baÄlı deÄilseniz pek bir Åey yapamazsınız. Subversion ve CVSāde ise dosyaları düzenleyebilir ama sunucuya commitleyemezsiniz (Ćünkü sunucunuz Ƨevrim dıÅıdır). Bu size Åu an Ƨok da ƶnemli bir ƶzellikmiÅ gibi gelmeyebilir ama Gitāi ƶÄrendikƧe ve kullandıkƧa bunun ne kadar büyük bir fayda saÄladıÄını bizzat gƶreceksiniz.
Gitāin Entegrasyonu Vardır
Gitādeki her Åeyin saklanmadan ƶnce saÄlaması yapılır ve ondan sonra da o saÄlamayla referans gƶsterilir. Bu da dosyaların ya da klasƶrlerin iƧeriÄini Gitāin haberi olmadan deÄiÅtirmenin imkĆ¢nsız olduÄu anlamına gelir. Bu iÅlev Gitāin temelinde gƶmülü halde gelir ve Git felsefesinin ayrılmaz bir parƧasıdır. Aktarım yaparken bilgi kaybetmezsiniz. Aynı Åekilde Git farkına varmadan bir dosya da bozulmaz.
Gitāin saÄlama yapmak iƧin kullandıÄı bu mekanizmanın adı SHA-1 ƶzetidir. Bu, on altılık karakterlerden (0-9 ve aāf) oluÅan ve Gitādeki bir dosya veya dizin yapısının iƧeriÄine gƶre hesaplanan 40 karakterlik bir karakter dizisidir. Bir SHA-1 ƶzeti Åuna benzer:
24b9da6552252987aa493b52f8696cd6d3b00373
Bu ƶzet deÄerlerini Gitāin ƧoÄu yerinde gƶreceksiniz çünkü Git onu sık sık kullanır. Hatta Git, sunucusundaki her Åeyi dosya isimleriyle deÄil, iƧeriklerinin ƶzet deÄeriyle saklar.
Git Genel Olarak Sadece Veri Ekler
Gitāde bir Åeyler yaptıÄınızda neredeyse hepsi sadece Gitāin veritabanına veri ekler. Sistemin geri alınamayan bir Åey yapmasını veya verileri herhangi bir Åekilde silmesini saÄlamak zordur. Tüm VCSālerde olduÄu gibi, henüz iÅlemediÄiniz deÄiÅiklikleri kaybedebilir veya karman Ƨorman yapabilirsiniz, ancak Gitāe bir anlık gƶrünüm verdikten sonra (ƶzellikle veritabanınızı düzenli olarak baÅka bir repoya yollarsanız) kaybetmek Ƨok zordur.
Bu da Gitāi kullanmayı keyifli kılar, çünkü ortalıÄı batırma tehlikesi olmadan istediÄimiz gibi denemeler yapabileceÄimizi biliriz. Gitāin verilerini nasıl sakladıÄını ve kaybolmuÅ gibi gƶrünen dosyaları nasıl geri alabileceÄinizi daha detaylı bir Åekilde ƶÄrenmek iƧin: DeÄiÅiklikleri Geri Alma
ĆƧ Durum
EÄer Gitāi ƶÄrenme sürecinizin sorunsuz olmasını istiyorsanız, Åimdi dikkatinizi verin. Git hakkında akılda tutulacak ana Åey Åudur, Gitāin dosyalarınızın iƧinde bulunabileceÄi üç ana durum vardır: modified, staged, and committed:
-
Modified: dosyayı deÄiÅtirdiÄinizi ama henüz veritabanına katkılamadıÄınızı (commit) gƶsterir.
-
Staged: deÄiÅtirilmiÅ bir dosyayı bir sonraki katkı pozunda (snapshot) iÅlenecek Åekilde iÅaretlediÄinizi gƶsterir.
-
Committed: dosyanın güvenli bir Åekilde yerel veritabanınızda saklandıÄını gƶsterir.
Bu da bizi bir Git projesinin üç ana bƶlümüne getirir: the working tree (ƧalıÅma aÄacı), the staging area (izleme alanı), ve Git klasƶrü.

ĆalıÅma aÄacı (working tree), checkout komutunun projenin bir sürümünde ƧalıÅtırılmasıdır. Bu dosyalar Git dizinindeki sıkıÅtırılmıŠveritabanından Ƨıkarılır ve sizin modifiye edebilmeniz veya kullanabilmeniz iƧin diskinize yerleÅtirilir.
İzleme alanı (staging area) bir dosyadır, genel olarak Git klasƶrünüzün iƧindedir ve bir sonraki katkıya hangi bilgilerin iÅleneceÄini depolar. Git terminolojisindeki teknik adı ``index``dir, ama ``izleme alanı`` ifadesi de iÅ gƶrür.
Git klasƶrü ise Gitāin projenize ait tüm üstverileri ve nesne veritabanını sakladıÄı yerdir. Bu Gitāin en ƶnemli bƶlümüdür; aynı zamanda da baÅka bir repodan klon kopyaladıÄınızda kopyalanan Åeyin de ta kendisidir.
Gitāin iÅ akıÅı basitƧe Åƶyledir:
-
ĆalıÅma aÄacında dosyaları düzenlersiniz.
-
``git add ā¦ā`` komutuyla bir sonraki katkıya iÅlenecek olan deÄiÅiklikleri seƧersiniz.
-
``git commit ā¦ā`` komutuyla bir katkı iÅlersiniz, izleme alanındaki (stage) dosyaların pozlaını (snapshot) Ƨeker ve Git klasƶrünüzde kalıcı olarak saklarsınız.
EÄer bir dosyanın belli bir sürümü Git klasƶründeyse, o dosya katkılanmıŠsayılır (commited). EÄer düzenlenmiÅ ve izleme alanına eklenmiÅse, izlem'e alınmıÅtır (staged). EÄer son denetlenmesinden sonra deÄiÅtirilmiÅse ama iÅlenmemiÅse, o halde deÄiÅtirilmiÅ durumdadır (modified). Git Temelleri bƶlümünde bu durumlar hakkında daha fazla Åey ƶÄrenecek ve bu durumların avantajını kullanmayı ya da izlem (stage) kısmını tamamen es geƧmeyi ƶÄreneceksiniz: