Git protokolu merkezi + local repository mantigiyla calisir. Diger SCM protokollerinin aksine kod butunuyle merkezde toplanmaz.
Kisilerin kendi local repository si olur. Commit islemi buraya yapilir ve local repo degisir.
Local reponun tanimlanmis bir ya da birden fazla remote kaynagi olur. Mevcut degisiklik buraya push edilir ya da pull edilir.
Her dosyadaki degisiklik git tarafindan indexlenmez. Oncelikle bu degisiklikleri `git add` yaparak version control'e register etmen gerekir.
Ek olarak .gitignore araciligi ile regex paternleri belirleyebilir, oto index saglayabilirsin.
Indexledigi dosyalarda yapilan degisikliklerin stage edilmesi gerekir. Bu bir nevi `bu dosyayi degistirdim, haberin olsun` demektir. Senin haberin olmadan degisen dosyalar da olabilir. Cogu tool bu stage isini otomatize eder.
Dosyalar remote a gonderilirken `delta graph` cikarilarak gonderilir. Sadece yapilan degisiklikler gonderilir, dosyanin tamami gonderilmez. 1 milyon satirlik dosyaya 1 satir eklediysen sadece 1 satirlik data gonderirsin.
Bu degisiklikler loglanarak tutulur, git log adi verilir. Bir dosyanin son hali degisim loglarinin yani deltalarin process edilmesiyle elde edilir. Bu mekanizma istedigin versiyona geri donmeni saglar. Yani bir dosya 178 defa degistiyse, 2 hafta onceki haline geri donmek icin Git'in tek yapmasi gereken 2 hafta onceki son degisime kadar olan delta'yi process etmesidir.Yazilim muhendisliginde bu paterne "event source" adi verilir. Bolca kullaniriz.
Event Sourcing pattern - Cloud Design Patterns
Git ile versiyonladigin hicbir sey yok olmaz. Dosya silmek de bir log islemidir ve geri dondurulebilir. ( Geri dondurmeyi imkansiz kilmanin da yollari var )
Yeni baslayan birinin ogrenmesi gereken komutlar genelde:
git init
git add <dosya>
git commit -m <commit mesaji>
git remote add <repo>
git pull
git push
Seklinde.
Github, Bitbucket vs gibi ortamlar aslinda merkezi otorite gorevini ustlenirler, calisan protokol aynidir tumuyle. Kendin lokal makineni de "github" gibi merkezi hale getirebilirsin. Bazi sirketler boyle yaparlar kod disari cikmasin diye.
Git protokolunu yazan Linux Torvalds dir ayrica. Linux yetmemis dayiya.