-
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ı
3.1 Git Dalları - Dallar
Neredeyse her sürüm kontrol sisteminin (VCS) bir tür dal desteÄi vardır. Dal oluÅturmak, ana geliÅtirme hattından ayrılıp, bu ana hatla oynamadan ƧalıÅmalarımıza devam etmek anlamına gelir. BirƧok sürüm kontrol sistemi aracında bu, genellikle kaynak kodu dizininin yeni bir kopyasını oluÅturmanızı gerektiren ve büyük projeler iƧin uzun zaman alabilen, maliyetli bir süreƧtir.
Bazı insanlar Gitāin dalma modelini "ƶlümcül ƶzellik" olarak adlandırır ve kuÅkusuz Gitāi VCS topluluÄunda ƶne Ƨıkarır. Peki bu neden bu kadar ƶzeldir? Gitāin dallanma Åekli son derece hafiftir, bu da dallandırma iÅlemlerinin neredeyse anlık hale gelmesini saÄlar ve genellikle dallar arasında hızlı bir Åekilde geƧiÅ yapılabilir. DiÄer birƧok sürüm kontrol sisteminin aksine, Git iÅ akıÅlarında sık sık dal aƧma ve birleÅtirmeyi teÅvik eder, hatta gün iƧerisinde bir Ƨok kez. Bu ƶzelliÄi anlamak ve ustalaÅmak size güçlü ve benzersiz bir araƧ saÄlar ve geliÅtirme Åeklinizi tamamen deÄiÅtirebilir.
Dallar
Gitāin dallanma yƶntemini gerƧekten anlamak iƧin bir adım geriye Ƨekilip Gitāin verileri nasıl sakladıÄını incelememiz gerekiyor.
BaÅlangıƧ bƶlümünden hatırlayabileceÄiniz gibi Git, verileri bir dizi deÄiÅiklik veya farklılık olarak deÄil, bir dizi poz olarak saklar.
Git, bir katkı iÅlediÄinizde, izleme (stage) aldıÄınız iƧeriÄin pozunun iÅaretƧisini iƧeren bir katkı nesnesi saklar. Bu nesne aynı zamanda yazarın adını ve e-posta adresini, katkı mesajını ve ƶncel katkı veya katkılara iliÅkin iÅaretƧileri iƧerir. İlk katkı (first commit) iƧin sıfır; normal bir katkı iƧin bir; ve birden fazla dalın birleÅmesinden kaynaklanan bir katkı iƧinse Ƨoklu ƶncel katkı bulunur.
Bunu gƶrselleÅtirmek iƧin, üç dosya iƧeren bir dizine sahip olduÄumuzu ve bunların hepsini izleme alıp, katkı olarak iÅlediÄinizi varsayalım. Dosyaları izlemlemek, her bir dosya iƧin bir saÄlama toplamı (checksum) hesaplar (BaÅlangıƧ bƶlümünde bahsettiÄimiz SHA-1 karması), dosyanın bu sürümünü Git reposunda saklar (Git bunlara blobs olarak atıfta bulunur)(Binary Large OBject: ikilik geniÅ nesne), ve bu saÄlama toplamını izlem alanına ekler:
$ git add README test.rb LICENSE
$ git commit -m 'The initial commit of my project'
git commit
komutunu ƧalıÅtırarak bir katkı oluÅturduÄunuzda, Git her alt dizinin (bu durumda sadece kƶk (root) proje dizini) doÄrular ve bunları Git reposunda bir aÄaƧ nesnesi (tree object) olarak saklar.
Git daha sonra meta verileri ve kƶk proje aÄacının iÅaretƧisini iƧeren bir katkı nesnesi oluÅturur. Bƶylece gerektiÄinde pozu yeniden oluÅturabilir.
Git reponuz artık beÅ nesne iƧeriyor: - Her biri üç dosyadan birinin iƧeriÄini temsil eden üç blob - Dizinin iƧeriÄini ve hangi dosya adlarının hangi blob olarak depolandıÄını listeleyen bir aÄaƧ - Kƶk aÄacın iÅaretƧisini ve tüm katkı metaverisini iƧeren bir katkı

EÄer bazı deÄiÅiklikler yaparsanız ve tekrar katkı olarak iÅlerseniz, sonraki katkı, kendinden hemen ƶnceki katkıya iÅaret eden bir iÅaretƧiyi depolar.

Gitāteki bir dal, temel olarak üzerindeki katkılardan birinin hafif ve taÅınabilir bir iÅaretƧisidir.
Gitāte varsayılan dal master
adıyla ifade edilir (anadal).
Katkıları iÅlemeye baÅladıÄınızda, en son iÅlediÄiniz katkıyı gƶsteren bir master
dalı alırsınız.
Her katkı iÅlediÄinizde, master
dalı iÅaretƧisi otomatik olarak ileri hareket eder.
Not
|
Gitāteki |

Yeni bir Dal AƧma
Yeni bir dal oluÅturduÄunuzda ne olur?
Ćncelikle, bu size etrafında dolaÅabileceÄiniz yeni bir iÅaretƧi oluÅturur.
Diyelim ki testing
adında yeni bir dal oluÅturmak istiyorsunuz.
Bunu git branch
komutu ile yaparsınız:
$ git branch testing
Bu, Åu anda iÅlediÄiniz katkı iƧin yeni bir iÅaretƧi oluÅturur.

Git, Åu anda hangi dalda olduÄunuzu nasıl bilir?
Bunu HEAD
adlı ƶzel bir iÅaretƧiyi kullanarak yapar.
Yalnız bu Subversion veya CVS gibi alıÅkın olduÄunuz diÄer sürüm denetleyicilerindeki (VCS) HEAD
kavramından Ƨok farklıdır.
Gitāte bu, Åu anda üzerinde ƧalıÅtıÄınız yerel dalın bir iÅaretƧisidir.
Mevcut senaryomuzda halen master
dalındasınız.
git branch
komutu sadece yeni bir dal oluÅturdu ama henüz o dala geƧiÅ yapmadı.

Dal iÅaretƧilerinin nereye iÅaret ettiÄini gƶrmek iƧin en basitinden bir git log
komutu ƧalıÅtırabilirsiniz.
Bu seƧenek, --decorate
olarak adlandırılır.
$ git log --oneline --decorate
f30ab (HEAD -> master, testing) add feature #32 - ability to add new formats to the central interface
34ac2 Fixed bug #1328 - stack overflow under certain conditions
98ca9 The initial commit of my project
f30ab
katkısının hemen yanında master
ve testing
dallarını gƶrebilirsiniz.
Dallararası GeƧiÅ
Var olan bir dala geƧmek iƧin git checkout
komutunu ƧalıÅtırırsınız.
Hadi yeni oluÅturduÄumuz testing
dalına geƧelim:
$ git checkout testing
Bu komut HEAD
iÅaretƧisinin yƶnünü testing
dalına Ƨevirir.

Peki bunun ƶnemi nedir? Hadi Åimdi baÅka bir katkı iÅleyelim:
$ vim test.rb
$ git commit -a -m 'made a change'

HEAD
'in iÅaret ettiÄi dal ileriye doÄru hareket eder.İlginƧ bir Åekilde, testing
dalınız ileri hareket etti ancak master
dalınız halen en son bıraktıÄımız halde (testing
dalına geƧiÅ yaptıÄınız anda üzerinde bulunduÄunuz katkıya iÅaret ediyor).
Hadi master
dalımıza tekrar geƧelim:
$ git checkout master

Bu komut iki Åey yaptı:
İlk olarak, HEAD
iÅaretƧisini tekrar master
dalına Ƨevirdi ve ikinci olarak, ƧalıÅma dizinindeki dosyaları master
'ın iÅaret ettiÄi poza geri dƶnderdi.
Bu aynı zamanda, Åu andan itibaren yapacaÄınız deÄiÅikliklerin projenin eski bir sürümünden sapacaÄı anlamına gelir.
Bu testing
dalındaki yaptıÄınız ƧalıÅmayı geri sararak daha farklı bir yƶne gidebilmenizi saÄlar.
Not
|
Dallar arasında geƧiÅ yapmak ƧalıÅma dizinindeki dosyaları deÄiÅtirir
Gitāte dallar arasında geƧiÅ yaparken, ƧalıÅma dizininizdeki dosyaların deÄiÅeceÄini unutmamalısınız! EÄer daha eski bir dala geƧerseniz, ƧalıÅma dizininiz o dalda son katkı iÅlediÄiniz ana geri dƶner. EÄer Git bunu temiz bir Åekilde gerƧekleÅtiremezse, geƧiÅ yapmanıza hiƧ izin vermez. |
Hadi bir kaƧ deÄiÅiklik yapalım ve katkı iÅleyelim:
$ vim test.rb
$ git commit -a -m 'made other changes'
Åimdi projenizin geƧmiÅi sapmıŠdurumda (bakınız Ayrık geƧmiÅ (Divergent history)).
Bir dal oluÅturdunuz, ona geƧtiniz, üzerinde ƧalıÅtınız, ardından ana dalınıza geri dƶndünüz ve bambaÅka bir iÅ yaptınız.
Her iki deÄiÅiklik farklı dallarda yalıtılmıŠdurumdadır: Dallar arasında geƧiÅ yapabilirsiniz ve istediÄinizde onları birleÅtirebilecek durumdasınız.
Bunların hepsini basit branch
, checkout
ve commit
komutları ile yaptınız.

Bu durumu git log
komutuyla kolayca gƶrebilirsiniz.
EÄer git log --oneline --decorate --graph --all
komutunu ƧalıÅtırırsanız; katkı geƧmiÅiniz, dal iÅaretƧilerinin nereye baktıÄı ve geƧmiÅinizin nasıl ayrıldıÄı ekranda yazacaktır.
$ git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) made other changes
| * 87ab2 (testing) made a change
|/
* f30ab add feature #32 - ability to add new formats to the
* 34ac2 fixed bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project
Gitāteki bir dal, aslında iÅaret ettiÄi katkının 40 karakterlik SHA-1 saÄlamasını tutan basit bir dosya olduÄu iƧin, dalları oluÅturmak ve yok etmek Git iƧin Ƨok kolaydır. Yeni bir dal oluÅturmak, bir dosyaya 41 bayt yazmak kadar hızlı ve basittir (40 karakter ve bir satırbaÅı).
Bu, yƶntem olarak projenin tüm dosyalarını ikinci bir dizine yedeklemeyi seƧen, ƧoÄu eski VCS aracının kullandıÄı yolun kesin bir zıttıdır. Yedekleme yƶntemi, projenin boyutuna baÄlı olarak birkaƧ saniye veya hatta dakika bile sürebilir. Oysa Gitāte katkı iÅlemi her zaman anlık olarak gerƧekleÅir. Ayrıca, katkı iÅlerken ƶncel katkıları da kaydettiÄimiz iƧin, birleÅtirmek iƧin uygun bir nokta bulma iÅlemi otomatik olarak yapılır ve genellikle Ƨok kolaydır. Bu ƶzellikler, geliÅtiricileri sık sık dallar oluÅturmaları ve kullanmaları yƶnünde cesaretlendirir.
Haydi, neden bunu yapmanız gerektiÄini gƶrelim.
Not
|
Tek komutla dal oluÅturmak ve o dala geƧiÅ yapmak
Yeni bir dal oluÅturmak ve aynı anda o yeni dala geƧmek sık karÅılaÅılan bir durumdur. Bunu tek komutla gerƧekleÅtirebiliriz: |